Неразрешенные внешние символы при компиляции 32-битного приложения в Windows 64 - PullRequest
11 голосов
/ 30 июня 2010

Поэтому я пытаюсь скомпилировать устаревшее приложение из 32-битного в 64-битное. Я перекомпилировал все используемые им библиотеки и сделал так, чтобы он смотрел в WIN SDK6.0A x64 bit для библиотек ..

Я использую:

  • Visual Studio Professional Edition 2008
  • Visual C ++
  • dotNet Framework 3.5 SP1
  • Windows Server 2008R2
  • Windows SDK 6.0A

В конце концов, все идет вперед, но я получаю эти странные неопределенные ошибки символов:

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 SDKs \ Windows \ v.0A \ Lib \ x64 и обе библиотеки lib kernel32.lib и psapi.lib находятся там.

Он определенно смотрит на библиотеки в правильном месте.Я включил / VERBOSE: LIB, и он указывает на правильную папку.

Так что я действительно смущен, почему он не находит их.

Любые идеи ???

Спасибо

Ответы [ 5 ]

13 голосов
/ 08 июля 2010

Так что я наконец понял это, вроде ... Он не нашел psapi.lib

В Project-> Linker-> Дополнительные зависимости вместо того, чтобы просто сказать psapi.lib Я дал полный путь к нему, и это сработало ... не совсем уверен, почему он не смог найти его раньше, ну да ладно ...

1 голос
/ 26 сентября 2013

Для записи: та же проблема, другое решение;У меня была запись для каталога

psapi 

, добавленная в список

Linker/General/Additional Library Directory 

Это привело к использованию старой платформы VS2005 sdk psapi.lib (в ней был только x86нет версии x64).После удаления записи теперь используется правильный lib из установленного WinSDK x64 / psapi.lib.Так что следите за смешиванием / заказом старых и новых SDK!Очевидно, что полный путь также будет работать, но может возникнуть проблема при использовании проекта на нескольких машинах.

1 голос
/ 01 июля 2010

Можете ли вы опубликовать свои командные строки компиляции и компоновки и любые # def в вашем коде?

Это происходит, если вы создаете простой проект с нуля, который вызывает только один из этих методов?

1 голос
/ 30 июня 2010

Это очень длинный выстрел (и я действительно не верю, что это так), но, возможно, заголовки не защищены должным образом с помощью extern "C" для компиляции c ++?Вы включаете системные заголовки или просто объявляете функции самостоятельно?

0 голосов
/ 03 декабря 2015

В моем случае (переход с VS2008 на VS2012) проблема решена после добавления psapi.lib в Linker-> input-> Дополнительные зависимости в VS 2012.

...