【问题标题】:Unresolved external symbol in library in C++C++ 库中未解析的外部符号
【发布时间】:2018-08-02 12:49:20
【问题描述】:

我正在尝试在 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++ 目录”中包含了库的路径,并在“附加库目录”中添加了 *.lib。 该设置处于“调试”、“x86”模式。

我已尝试更改“运行时库”中的设置,但它不起作用。 我试图改变“调用约定”,但它也不起作用。

因为是很久以前写的软件,所以我怀疑问题可能出在x86和x32上。但是在“配置管理器”中,它运行在平台win32上。应该没有错。

我也怀疑这可能是 .dll 中的问题,但我只是编译了软件。它应该只与.lib相关

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

我已经被困在这个问题中 2 天了。谁能来帮帮我。

【问题讨论】:

  • 库(lib 文件)可以是 x86 和 x64,您可能还想检查您链接的对象。
  • 在“附加库目录”中,您应该只添加目录,而不是库本身。这些在项目设置中有自己的位置。
  • 只有一个库文件,但我不知道它是在 x86 还是 x64 中。我怎么知道?
  • 事实上,在“其他库目录”中,我确实添加了路径,而不是库。我也尝试在 Input->additional Dependencies 中添加库文件,但还是不行。
  • 使用旧版本的VS并检查。

标签: c++ visual-studio dll development-environment lib


【解决方案1】:

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

【讨论】:

    【解决方案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文件。

    【讨论】:

    • 感谢您的回复。我使用带有 SDK 10.xx 的工具包 v141。我尝试将其更改为 v141_xp 我已将 SDK 10.xx 更改为 8.1,我已尝试将编译器模式 Debug 更改为 Release,
    • 感谢您的回复。我使用带有 SDK 10.xx 的工具包 v141。我尝试将其更改为 v141_xp 我已将 SDK 10.xx 更改为 8.1,我已尝试将编译器模式“调试”更改为“发布”,我已经厌倦了将“使用 MFC”更改为使用“MFC in静态库”我已经将“配置管理器”中的所有选项从 Win64 更改为 win 32,但所有这些更改只显示了我上面提到的相同错误我使用依赖行者检查我的 *dll。它说“找不到文件”,我想知道问题是否来自.dll?我试过dumpbin.exe,我想知道如何使用它
    • @QifengRUAN:dumpbin 从 lib 文件的标头中可以看出很多东西。为了更好地分析 lib 文件,您还可以将 sumbols 导出到文件并稍后检查。标题也是如此。最初它是一种痛苦,但你会从痛苦中学到更好的东西。像这样:dumpbin YOUR.lib /symbols > symbols.txt
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 2012-06-30
    相关资源
    最近更新 更多