Визуалстудия 2008 экспресс.Есть проект.Немогу сказать что большой.Но текста там много.И файлов то же.Надо найти в нем вызовы всех CRT ф-ций.МОжно для этого использовать встроенные или какие сторонние утилиты?Преследую цель полного избавления от MSVCR90.dll
/NODEFAULTLIB и линкер выведет список ненайденных символов (функций), в этом списке отбросить функции из всяких kernel32.dll и других подобных библиотек и остануться функции CRT... добрую половину которых можно заменить на соответствующие функции из msvcrt.dll, kernel32.dll, user32.dll, ntdll.dll... в студии вообще очень толстый CRT, одна из причин, по которой я ее не люблю...
Проблема с memcpy липучим.Смотрю в импорт а он там единственный висит.Делаю поиск по файлам,но не в одном *.c,не в *.h, не в*.cpp.Его ненаходит =/ В чем прикол?
_nic он самый липучий.Както нужно было без импорта обойтись - написал свой memcpy(), есессно ЦРТ даже не пахло в моем проже, но была ntdll.lib подключена, так студия "увидев" сигнатурку копирования памяти лепила мне импорт ntdll!memcpy - вот так вот, асм форева.) NODEFAULTLIB в линкера настройках и в Си\С++ еще там надо вырубить прооверки стека и т.п. = ЦРТ уходит тихо спать
всякие функции типа CopyMemory в студии препроцессором подменяются на memcpy... если используешь какой-нить std::string, то наверняка рн за собой тянет... ну и можно до бесконечности продолжать...
как, например, простая инициализация локальной переменной-структуры нулями потянет за собой memset. Поэтому единственно верный путь избавления от внешних зависимостей с msvcrX.dll - перевод их во внутренние, то бишь использование статического связывания.
Мне что все ф-ции динамически вызывать?( ЗЫ:с Код (Text): #pragma comment( linker, "/NODEFAULTLIB") отключаю проверку буфера ,и такое вот всеравно
забейте и юзайте Код (Text): VOID MemCpy( IN PVOID Dest, IN PVOID Src, IN ULONG Size ) { ULONG i; for (i=0; i < Size; i++) ((PBYTE)Dest)[i] = ((PBYTE)Src)[i]; return; } или давайте сюда прож....у меня все норм работает без ЦРТ (забыл когда его последний раз юзал)
1) http://msdn.microsoft.com/en-us/library/f99tchzc.aspx, может помочь, но мне не помогло. 2) Из-за некоторых оптимизаций, компилятор принимает решение заменить ваш алгоритм на memcpy - это не управляется (судя по моим бессонным ночам), хотя может что-то и можно намудрить с опциями компилятора... Искать такие оптимизации довольно сложно, проще написать свою memcpy, и прочие требуемые функций. Т.е. прямо так и нужно писать реализацию на прототип: ~ Код (Text): void * __cdecl memcpy (void * dst, const void * src, size_t count) Функцию можно взять тут: "%VS%\VC\crt\src\memcpy.c" И если память не подводит еше нужен препроцессор #pragma function(memcpy) 3) Можно вернуться к msvcrt.dll, http://kobyk.wordpress.com/2007/07/20/dynamically-linking-with-msvcrtdll-using-visual-c-2005/
Попробуйте указать точку входа вручную, то есть использовать не _main или WinMain... но тогда придется отказаться от всяких вкусностей типа new и delete... И в свойствах компилятора указать 'Библиотека времени выполнения -> Многопоточная (/MT) или (/MTd)' Код (Text): #include "windows.h" #pragma comment (linker, "/ENTRY:EntryPoint") // здесь был вызов функции _main void EntryPoint () { hInst = GetModuleHandle (NULL); }
Я этто в 1ю очередь сделал и это не имеет никакого отношения к memcpy ЗЫ:в ntdll реально есть реализация memcpy ???
>в ntdll реально есть реализация memcpy ??? откройте в любом PE вивере, там есть не только memcpy.. _nic обьясните что именно у вас не так - вы юзаете memcpy() а оно кричит что не понимает чего вы хотите, или же у вас просто прож и почему то оно кричит что не понимает что такое memcpy()??? Xml большего бреда слышать не приходилось....
/Oi- помогло. Но теперь по серьезней проблема.Проект юзает zlib.lib а там идут цртшные вызовы А я уже даже и не помню как мне удалось собрать этот zlib.lib(
Создал деф файл с помощью implib.Пытаюсь при помощи стандартного lib.exe создать *.lib файл.И тут обломец