2009-08-06 110 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)。