标准库已在lib中定义,导致链接器错误

standard library already defined in lib, causing linker error

本文关键字:链接 错误 定义 lib 标准      更新时间:2023-10-16

不知道我在这里做错了什么,但是说我有:

foo。

class foo
{
public:
int Get10(std::wstring);
};

foo.cpp

int foo::Get10(std::wstring dir)
{
   return 10;
};

我将它编译为一个库,如果我将该库与相关的头文件(foo.h)一起包含在另一个项目中,并尝试调用foo的实例:

foo f;
f.Get10(L"ABC");

我得到一个链接错误说:

错误1错误LNK2005: "public: __thiscall .std:: _Container_base12:: ~ _Container_base12(空白)"(??1_Container_base12@std@@QAE@XZ)已经定义在foo.lib(foo.obj) C:foomsvcprtd.lib(msvcp100 .dll) footest

知道为什么会这样吗?

错误1错误LNK2005: "public: __thiscall .std:: _Container_base12:: ~ _Container_base12(空白)"(??1_Container_base12@std@@QAE@XZ)已经在foo.lib(foo.obj)中定义C: foo msvcprtd.lib (MSVCP100D.dll)脚

从我所看到的,这个错误消息意味着你试图包含MSVC运行时库两次。这可能是由于编译foo.lib的运行时库选项:"多线程(/MT)"和测试项目的选项:"多线程DLL (/MD)"的结果。

检查两个项目的"Project Properties" ==> "C/c++ " ==> "Code Generation"下的Runtime选项,并确保它们在两个项目中是相同的。

您是否在任何。h文件中包含foo.h ?您可能需要添加头保护,以确保您不会在每个文件中定义该类多次:

#ifndef FOO_H_
#define FOO_H_
class foo
{
 public:
  int Get10(std::wstring);
}
#endif  // FOO_H_

参见:http://en.wikipedia.org/wiki/Include_guard