这个问题在这里已经有了答案:
What is an undefined reference/unresolved external symbol error and how do I fix it?
(37 个回答)
4年前关闭。
我继承了一个遗留项目,它利用 *.lib 中的一些外部函数。据我所知,使用 *.lib 的语法是正确的,这
可以在他们使用的任何 Visual Studio 版本中构建。 (即,有一个外部“C”原型(prototype)文件,并且所有函数签名都是正确的)。
构建时,我收到“错误 LNK2019:未解析的外部符号 _A86_ReadConfigReg@12 在函数中引用...”
我很确定这与 *.lib 文件有关,因为 *.lib 文件的名称中有“A86”……还有一个同名的 *.dll。
我去了项目属性-> 链接器-> 输入并在“附加依赖项”中列出了 *.lib 文件名,但没有运气。我尝试添加包含目录,将 *.lib 和 *.dll 复制到可执行位置。但没有运气。
我该如何解决这个错误?
最佳答案
您应该做的第一件事是检查库以确保引用的函数在那里。启动 msvc 开发人员命令提示符,然后运行 dumpbin.exe
句法:
dumpbin /exports <full path library name>
这将为您提供库中所有导出符号的列表。
从那里你会更清楚地知道该怎么做。
[编辑]
dumpbin 告诉你,你的 lib 导出了一个名为
A86_ReadConfigReg
的函数。 ,这是一个 __cdecl 签名,而不是像 _A86_ReadConfigReg@12
这样的 __stdcall 签名您的链接器所期望的......您应该按照优先级顺序至少做两件事/检查。Project Properties->C/C++->Advanced->Calling Convention
中的/Gz 开关控制。 .默认应设置为 __cdecl (/Gd) extern "C" { }
中。堵塞。如果没有,您可以将 block 放在#include 指令周围,这样您就不必修改库的文件。 像这样:
extern "C" {
#include <mylib.h>
}
关于c++ Visual Studio,使用.lib文件未解析的外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45201826/