C++ 库中未解析的外部符号

Unresolved external symbol in library in C++

我正在尝试编译在 visual studio 2017 年用 C++ 编写的联合国软件,但我在库中遇到了联合国问题。描述是这样的

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2001 unresolved external symbol "public: virtual void __thiscall CEZOptionsDlg::AddButton(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >,unsigned int)" (?AddButton@CEZOptionsDlg@@UAEXV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@I@Z)

我已经在"VC++ directories"中包含了库的路径,并在"Additional library directories"中添加了*.lib。 该设置的模式为 "Debug" , "x86"。

我曾尝试更改 "Runtime library" 中的设置,但没有成功。 我试过更改 "calling convention",但它也不起作用。

因为是很久以前写的软件,怀疑是不是x86和x32的问题。但在 "configuration manager" 中,它在 win32 平台上运行。应该不会错。

我也怀疑是不是dll的问题,不过我只是编译软件而已。它应该只与.lib

有关

不知道*.lib是否完整,因为我没有这个库的源码

我被问题困了2天了。谁能来帮帮我。

您的清单

1) 确认工具包 V110、v120、v14、v141

2) 确认 x86 或 x64

3) 确认 MT(静态 -> 只需要 lib)或 ML(动态 -> 需要 dll 和 lib)

4) DLL 可能是发布版或调试版

5) VS SDK 版本(SDK 7.xx、SDK 8.1、SDK 10.xxx 等)

使用 VS 2017 中的 dumpbin.exe 从 lib 文件中查找导出方法和其他签名的详细信息。使用dependency-walker(网上免费下载)分析DLL文件。

终于发现是一个很老的de Visuel C++(VS 98)版本引起的,估计和我同龄。在 Visuel Stdio 2017(听起来很荒谬)中使用 VS98 后,代码可以正确构建。 我想这个问题可能只发生在我身上。但是,无论如何,我希望这个解决方案对其他人有所帮助。