2009-08-06 107 views
0

我在编译项目时出错。 我试图链接到我在Windows上使用visual studio的库。C++链接问题

当试图创建obkect(新),我收到以下错误:

Error 2 error LNK2005: "public: __thiscall std::basic_string,class std::allocator >::~basic_string,class std::allocator >(void)" ([email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) already defined in RMLibV053.lib(Inifile.obj) msvcprtd.lib

我用的#ifndef 我用

+0

您是否修改了编译器路径或添加了额外的库? – 2009-08-06 13:07:52

+0

是的,我添加了路径。 – 2009-08-06 13:15:14

回答

3

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

+1

不仅有一个在系统中 – 2009-08-06 13:11:10

+0

这几乎总是造成这个问题的原因。 PTLibV002.lib可能与该设置一起使用静态链接的运行时库进行编译。 – KJAWolf 2009-08-06 13:22:20

+0

是的,我需要静态链接运行时间库 – 2009-08-06 14:40:17

0

可能是你增加了一个类似的库附加库禁用警告。

+0

不,我只添加了一个 – 2009-08-06 13:15:44

2

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

+0

我把它作为静态链接。我使用Visual Studio并在链接中定义,所以我想这不是事实。 – 2009-08-06 15:14:47

0

正如Ferruccio解释过的。

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