0

Привет, ребята, я работаю над приложением, и я удалил CRT, чтобы сохранить много места в исполняемом файле и сделать его как можно меньшим :) Дело в том, что когда я извлекал CRT я также получил тонны ошибок на неразрешенный внешний и я был в состоянии удалить большинство из них просто добавив несколько операторов, подобные этим:Убрали библиотеку времени выполнения C, и я получаю некоторые нерешенные внешние ссылки

void * __cdecl operator new(unsigned int bytes) { 
    return HeapAlloc(GetProcessHeap(), 0, bytes); 
} 

void __cdecl operator delete(void *ptr) { 
    if(ptr) HeapFree(GetProcessHeap(), 0, ptr); 
} 

extern "C" int __cdecl __purecall(void) { 
    return 0; 
} 

extern "C" const DWORD_PTR __security_cookie = 0xE64EBB40; 

extern "C" void __fastcall __security_check_cookie(DWORD_PTR cookie) { 
    if (cookie != __security_cookie) 
     __asm int 3; 
} 

, но теперь я застрял с последними тремя ошибками и я не знаю, как их решить, и тот, который мне действительно интересен, является ошибкой _memmove? Я не использую оператор memmove в любом месте своего кода, поэтому я не знаю, почему я его получаю: P

atleast вот ошибки, я был бы очень благодарен за ваши ответы.

Error 2 error LNK2001: unresolved external symbol "void __cdecl std::_Xbad_alloc(void)" ([email protected]@@YAXXZ) C:\Users\Fluttershy!\documents\visual studio 2012\Projects\PincelStub\PincelStub\PincelStub.obj 
Error 3 error LNK2001: unresolved external symbol "void __cdecl std::_Xlength_error(char const *)" ([email protected]@@[email protected]) C:\Users\Fluttershy!\documents\visual studio 2012\Projects\PincelStub\PincelStub\PincelStub.obj 
Error 4 error LNK2001: unresolved external symbol _memmove C:\Users\Fluttershy!\documents\visual studio 2012\Projects\PincelStub\PincelStub\PincelStub.obj 
+2

Генератор кода предполагает, что вы свяжете ЭЛТ, чтобы генерировать вызовы для примитивов, таких как memmove(), когда он может использовать его для оптимизации кода. Оставив вас с задачей реализовать это. И вы используете стандартные методы библиотеки C++, предоставляя вам задачу реализовать вспомогательные функции, которые она использует. Это работа, которая никогда не выполняется. Особенно, когда вы обнаруживаете, что вы не можете вообще пропускать обработку ошибок: :: operator new должен бросить std :: bad_alloc. Вот когда это действительно становится болезненным :) –

ответ

1

VC++, вероятно, использует те внутренне (первые два, чтобы сигнализировать наличие ошибок и _memmove, а для перемещения блоков памяти вокруг в равнинных старых struct заданий, например). Первые два, я бы просто определил как {}, но что касается последнего, я бы попробовал возиться с вариантами оптимизации (что-то о «встроенных функциях» и т. Д.) Или полностью реализовать его (а не просто заглушить).

0

Я не уверен, почему вы хотите стрелять в ногу, но что угодно. Источник CRT сидит там, поэтому вы можете просто искать его для пропавших вещей и копировать. функция memmove должна быть очевидной. Остальные два похожи на стандартные исключения.