链接时出现"无法解析的外部符号, 错误信息(cpp编译出的符号)
BatViewDlg.obj : error LNK2001: unresolved external symbol
"unsigned char __stdcall GetPwrCapabilities(struct SYSTEM_POWER_CAPABILITIES *)"
(?GetPwrCapabilities@@YGEPAUSYSTEM_POWER_CAPABILITIES@@@Z)
用dumpbin观察对应dll/lib的导出符号信息
dumpbin /exports *.dll
dumpbin /exports *.lib对应的lib/dll的导出符号信息(extern "C" 所编译出的符号)
_GetPwrCapabilities@4所编译出的符号信息和导出符号信息不匹配所造成的
自己的代码采用cpp的方式编译而到处符号的代码采用c的方式编译(_stdcall)
将所引用的头文件 用extern "C"包装所引用的头文件以解决问题
#ifdef __cplusplus
extern "C" {
#endif
#include <Powrprof.h>
#ifdef __cplusplus
}
#endif
本文探讨了在链接过程中遇到的“无法解析的外部符号”错误,并提供了详细的解决方案。通过对比cpp编译符号与dll/lib导出符号的区别,指出了问题所在,并给出了使用extern C修饰符来确保符号一致性,从而解决该错误的方法。
3060

被折叠的 条评论
为什么被折叠?



