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


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

我在用:

  • Visual Studio专业版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都在那里。

它绝对可以在正确的位置查找库。我打开/ VERBOSE:LIB 它指向正确的文件夹。

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

有任何想法吗???

谢谢


1883
2018-06-30 17:21


起源



答案:


所以我终于明白了,有点...... 它没有找到psapi.lib

在Project-> Linker-> Additional dependencies中,而不是仅仅说psapi.lib 我给了它完整的路径,它起作用了...... 不确定为什么以前找不到它但是哦......


13
2017-07-08 15:18



如果你正在使用msvc,你可以使用 #pragma comment(lib, "psapi.lib") 从源代码中添加它。 - Billy ONeal
等一下这会[#pragma comment(lib,“psapi.lib”)]做什么? - grobartn


答案:


所以我终于明白了,有点...... 它没有找到psapi.lib

在Project-> Linker-> Additional dependencies中,而不是仅仅说psapi.lib 我给了它完整的路径,它起作用了...... 不确定为什么以前找不到它但是哦......


13
2017-07-08 15:18



如果你正在使用msvc,你可以使用 #pragma comment(lib, "psapi.lib") 从源代码中添加它。 - Billy ONeal
等一下这会[#pragma comment(lib,“psapi.lib”)]做什么? - grobartn


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


1
2018-06-30 19:05



nope :(他们都有外部和一切.... - grobartn
你试过完全重建吗?我注意到VC ++不时会“混淆”(它可能会混淆程序数据库)并且完全重建通常会有所帮助。我会事先删除所有* .obj,* .exe和* .pdb,以防万一... - Tomek
没那么多次...... - grobartn


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

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


1
2017-07-01 01:20





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

psapi 

添加在列表中

Linker/General/Additional Library Directory 

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


1
2017-09-26 11:29





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


0
2017-12-03 07:13