Неразрешенные внешние символы при компиляции 32-битного приложения в Windows 64
Итак, я пытаюсь скомпилировать устаревшее приложение с 32 до 64 бит.
Я перекомпилировал все библиотеки, которые он использовал, и запустил его в WIN SDK6.0A x64 бит для libs.
Я использую:
- Visual Studio Professional Edition 2008
- Visual С++
- dotNet Framework 3.5 SP1
- Windows Server 2008R2
- Windows SDK 6.0A
Все, наконец, придет, но я получаю эти странные ошибки символа undefined:
error LNK2019: unresolved external symbol InterlockedDecrement referenced in function ...
error LNK2019: unresolved external symbol InterlockedIncrement referenced in function ...
error LNK2019: unresolved external symbol GetModuleBaseName referenced in ...
error LNK2019: unresolved external symbol EnumProcessModules referenced in ...
error LNK2019: unresolved external symbol EnumProcesses referenced in ...
error LNK2019: unresolved external symbol GetProcessMemoryInfo referenced
Проблема в том, что это все, что происходит от SDK.
InterlockedDec и InterlockedInc поступают из kernel32.lib
GetModuleBaseName, EnumProcessModules, EnumProcesses, GetProcessMemoryInfo находятся в psapi.h, но также kernel32.lib или psapi.lib
Я проверил C:\Program Files\Microsoft SDK\Windows\v6.0A\Lib\x64 и обе библиотеки
kernel32.lib и psapi.lib.
Он определенно ищет ливы в нужном месте. Я включил /VERBOSE: LIB
и указывает на правильную папку.
Итак, я действительно запутался, почему он не находит их.
Любые идеи???
Спасибо
Ответы
Ответ 1
Итак, я, наконец, понял это, вроде...
Он не нашел psapi.lib
В Project- > Linker- > Дополнительные зависимости вместо того, чтобы просто сказать psapi.lib
Я дал полный путь, и это сработало...
не совсем уверен, почему он не смог найти его раньше, но хорошо...
Ответ 2
Это очень длинный снимок (и я действительно не верю, что это так), но, возможно, заголовки не защищены должным образом с помощью extern "C" для компиляции С++? Вы включаете системные заголовки или просто декларируете функции самостоятельно?
Ответ 3
Можете ли вы опубликовать свои компилируемые и связанные командные строки и любые #def в коде?
Это происходит, если вы делаете простой проект с нуля, который вызывает только один из этих методов?
Ответ 4
Для записи: та же проблема, другое решение;
У меня была запись для каталога
psapi
добавлен в список
Linker/General/Additional Library Directory
Это привело к использованию старой платформы VS2005 sdk psapi.lib(у нее была только версия x86, x64).
После удаления записи теперь используется правильный lib из установленного WinSDK x64/psapi.lib.
Поэтому следите за смешиванием/заказом старых и новых SDK!
Очевидно, что полный путь также будет работать, но может быть проблемой при использовании проекта на нескольких машинах.
Ответ 5
В моем случае (перейдите с VS2008 на VS2012), проблема будет решена после добавления psapi.lib в Linker- > input- > Additional Dependencies в VS 2012. p >