11

所以我正在尝试将旧版应用程序从 32 位编译到 64 位。我重新编译了它使用的所有库,并使其看起来像 WIN SDK6.0A x64 位的库。

我在用:

  • Visual Studio 专业版 2008
  • 视觉 C++
  • dotNet 框架 3.5 SP1
  • 视窗服务器 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\v6.0A\Lib\x64 并且 libs kernel32.lib 和 psapi.lib 都在那里。

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

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

有任何想法吗???

谢谢

4

5 回答 5

14

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

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

于 2010-07-08T15:18:30.787 回答
1

这是一个很长的镜头(我真的不相信就是这样),但是对于 c++ 编译,可能没有用 extern "C" 正确保护标题?您是包含系统标头还是只是自己声明功能?

于 2010-06-30T19:05:33.343 回答
1

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

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

于 2010-07-01T01:20:52.653 回答
1

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

psapi 

添加到列表中

Linker/General/Additional Library Directory 

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

于 2013-09-26T11:29:13.203 回答
0

在我的情况下(从 VS2008 迁移到 VS2012), 在 VS 2012 中的Linker->input->Additional Dependencies添加psapi.lib后问题解决了。

于 2015-12-03T07:13:26.917 回答