错误 LNK2001:未解析的外部符号
Posted
技术标签:
【中文标题】错误 LNK2001:未解析的外部符号【英文标题】:error LNK2001: unresolved external symbol 【发布时间】:2011-02-16 12:37:17 【问题描述】:我正在将我的项目从 vc6 转换为 VS 2010。当我编译我的项目时,对于可能的 .lib 输入,我收到如下错误。我已经在 Linker-> Input-> Additional Dependencies 中添加了所有这些库,还在 Link->General->Additional Library 目录中提供了这些 .lib 文件的路径。这方面的任何提示都会非常有帮助。
lb0.lib(ob0.obj) :error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" (?SetLastExP@@YGXPAVExceptionClass@@@Z)
lb1.lib(ob1.obj) : error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" (?SetLastExP@@YGXPAVExceptionClass@@@Z)
lb2.lib(ob2.obj) : error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" (?SetLastExP@@YGXPAVExceptionClass@@@Z)
lb3.lib(ob3.obj) : error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" (?SetLastExP@@YGXPAVExceptionClass@@@Z)
lb3.lib(ob4.obj) : error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" (?SetLastExP@@YGXPAVExceptionClass@@@Z)
lb3.lib(ob5.obj) : error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" (?SetLastExP@@YGXPAVExceptionClass@@@Z)
lb4.lib(0b6.obj) : error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" (?SetLastExP@@YGXPAVExceptionClass@@@Z)
谢谢
【问题讨论】:
我可能错了,但我认为微软从 VC++ 6 开始将默认的 TCHAR 定义形式 char 更改为 wchar。可能是您以前的 lib 在方法签名中导出 char* 但您的新代码是寻找 wchar。如果是这种情况,那么您可以重新编译库,或更改新项目中的默认字符集。 嗨 Jimmy,我的 lib 和我的项目都只使用 wchar。 除了非常仔细地检查方法签名(包括调用类型、参数)之外,恐怕我不知道该建议什么。出于兴趣,您的程序是否链接到 zzzClass 上的任何其他方法? zzzClass 是模板类吗?对不起 你确定zzzClass::SetAaF在zzz.cpp中有一个函数体吗?? 是的,zzzClass::SetAaF 在 zzz.cpp 中有一个函数体。 【参考方案1】:您需要确定SetLastExP()
函数的定义位置。
获取 .obj 文件并检查 dumpbin 是否实现了您期望的装饰。
dumpbin /symbols foo.obj | find "External" | find "SetLastExP"
将您看到的装饰与链接器错误消息中的装饰进行比较。
可能函数定义为extern "C"
,而您的头文件没有反映这一点。
【讨论】:
谢谢,我必须添加另一个 .lib 文件,其中 SetLastExP() 函数在 cpp 文件中定义。这将我的错误从 153 减少到 13,现在我剩下了。【参考方案2】:有时,如果您的子项目中有不同的字符集 (Configuration properties
-> general
),Visual Studio 会显示这种错误:
error LNK2001: unresolved external symbol" with an *.obj
【讨论】:
以上是关于错误 LNK2001:未解析的外部符号的主要内容,如果未能解决你的问题,请参考以下文章
从 C++ 连接 MySQL:错误 LNK2001:未解析的外部符号 [重复]
为啥错误 LNK2001:在这种情况下无法解析外部符号? [复制]
radial.o:错误 LNK2001:无法解析的外部符号 lambda_fatal 错误 LNK1120:8 个无法解析的外部,error.failed 退出状态为 1120