在Windows 64中编译32位应用程序时未解析的外部符号

时间:2010-06-30 17:21:48

标签: c++ visual-studio-2008 winapi win64 kernel32

所以我试图将遗留应用程序从32位编译到64位.. 我重新编译了它使用的所有库,并使其查看WIN SDK6.0A x64位用于库..

我正在使用:

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

Everythings终于出现但我得到了这些奇怪的未定义符号错误:

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 \ v6.0A \ Lib \ x64以及两个库 那里有kernel32.lib和psapi.lib。

它肯定会在正确的位置查找libs。我打开/ VERBOSE:LIB 它指向正确的文件夹。

所以我真的很困惑,为什么它找不到它们。

任何想法???

由于

5 个答案:

答案 0 :(得分:13)

所以我终于想通了,有点...... 它找不到psapi.lib

在Project-> Linker->其他依赖项,而不仅仅是说psapi.lib 我给了它完整的路径,它起作用了...... 不确定为什么以前找不到它但是很好......

答案 1 :(得分:1)

这是一个很长的镜头(我真的不相信这是它)但是,对于c ++编译,可能没有用extern“C”正确保护标题?您是否包括系统标题或仅自己声明功能?

答案 2 :(得分:1)

您可以发布编译和链接命令行,以及代码中的任何#def吗?

如果从头开始创建一个只调用其中一种方法的简单项目会发生这种情况吗?

答案 3 :(得分:1)

记录:同样的问题,不同的解决方案; 我有一个目录

的条目
psapi 

添加在

列表中
Linker/General/Additional Library Directory 

这导致使用旧的VS2005平台sdk psapi.lib(它只有x86,没有x64版本)。 删除条目后,立即使用已安装的WinSDK x64 / psapi.lib中的正确lib。 因此,请密切关注旧的& amp;的混合/订购新的SDK! 显然,完整路径也可以工作,但在多台机器上使用项目时可能会出现问题。

答案 4 :(得分:0)

在我的情况下(从VS2008迁移到VS2012),在VS 2012中的链接器 - >输入 - >附加依赖关系中添加 psapi.lib 后问题得以解决。