关于C#:在Windows 64中编译32位应用程序时无法解析的外部符号

Unresolved external symbols in compiling 32 bit application in Windows 64

因此,我正在尝试将旧版应用程序从32位编译为64位。
我重新编译了它使用的所有库,并使其成为WIN SDK6.0A x64位库。.

我正在使用:

  • Visual Studio专业版2008
  • 视觉C
  • dotNet Framework 3.5 SP1
  • Windows Server 2008R2
  • Windows SDK为6.0A

一切最终都出现了,但是我遇到了这些奇怪的未定义符号错误:

1
2
3
4
5
6
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
并指向正确的文件夹。

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

任何想法????

谢谢


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

在Project-> Linker->其他依赖项中,而不只是说psapi.lib
我给了它一个完整的途径,它奏效了...
不太确定为什么以前找不到它,但是好吧...


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

的条目

1
psapi

添加到

列表中

1
Linker/General/Additional Library Directory

这导致使用旧的VS2005平台sdk psapi.lib(仅具有x86,没有x64版本)。
删除条目后,现在使用已安装的WinSDK x64 / psapi.lib中的正确库。
因此,请注意旧的混合/排序


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

如果您从头开始创建仅调用那些方法之一的简单项目,这会发生吗?


这是一个很长的镜头(我真的不相信这是事实),但是对于c编译来说,也许标题没有用extern " C "来适当地保护吗?您是要包含系统头文件还是只是自己声明函数?


n