Неразрешенные внешние символы при компиляции 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 >