【问题标题】:C++ Linking problemC++ 链接问题
【发布时间】:2010-11-17 08:17:45
【问题描述】:

我在编译项目时出错。 我正在尝试使用 Visual Studio 链接到我在 Windows 上拥有的库。

当尝试创建 obkect (with new) 时,我收到以下错误:

错误 2 错误 LNK2005: "public: __thiscall std::basic_string,class std::allocator >::~basic_string,class std::allocator >(void)" (??1?$basic_string@DU?$char_traits @D@std@@V?$allocator@D@2@@std@@QAE@XZ) 已在 RMLibV053.lib(Inifile.obj) msvcprtd.lib 中定义

我使用了#ifndef 我使用了禁用警告

【问题讨论】:

  • 您是否修改了编译器路径或添加了额外的库?

标签: c++ visual-studio


【解决方案1】:

正如费鲁乔之前解释的那样。

我在项目的 Visual Studio 配置上使用:使用动态链接运行时库的设置进行编译:多线程调试 DLL (/MDd) 而不是多线程调试 (/MTd)。

【讨论】:

    【解决方案2】:

    如果 PTLibV002.lib 被编译为使用静态链接的 C++ 库,并且您的二进制文件使用 C++ 库作为 DLL,那么这就是您会收到的链接错误。这是因为 PTLibV002.lib 将包含它使用的 STL 中的函数定义,而您的二进制文件包含另一个指向 C++ 库 DLL 的定义。

    【讨论】:

    • 我将它编译为静态。我使用的是Visual Studio并在链接中定义,所以我猜不是这样。
    【解决方案3】:

    您的代码可能设置为使用与构建时的 PTLibV002.lib 库不同的运行时环境(单线程、多线程、多线程 DLL)。

    【讨论】:

    • 这几乎总是导致此问题的原因。 PTLibV002.lib 可能是使用静态链接运行时库的设置编译的。
    【解决方案4】:

    您可能在其他库中添加了类似的库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      相关资源
      最近更新 更多