2009-06-01 16 views
2

觀察這個關閉方案,即使它看起來與我以前的問題相同。我仍然沒有得到答案。 所以請不要重複報告。Visual C++運行時庫鏈接程序的問題

我有一個項目有10個依賴項。首先,我在主項目的C/C++代碼生成部分使用/ MTD選項進行編譯,並且所有依賴項都已成功生成。

接下來我將選項從/ MTD更改爲/ MDd,並且所有依賴項目都再次成功建立 。但對於主要項目如下錯誤報告:


LIBCMTD.lib(osfinfo.obj) : error LNK2005: __open_osfhandle already defined in MSVCRTD.lib(MSVCR80D.dll) 

LIBCMTD.lib(lseeki64.obj) : error LNK2005: __lseeki64 already defined in MSVCRTD.lib(MSVCR80D.dll) 


sqlite3x.lib(sqlite3x_command.obj) : error LNK2005: "protected: wchar_t * __thiscall std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >::_Myptr(void)" ([email protected][email protected][email protected][email protected]@@[email protected][email protected]@@[email protected]@IAEPA_WXZ) already defined in msvcprtd.lib(MSVCP80D.dll) 

MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: __mkdir already defined in LIBCMTD.lib(mkdir.obj) 

MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: __strdup already defined in 
LIBCMTD.lib(strdup.obj) 

    Creating library Debug/Application.lib and object Debug/Application.exp 
LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library 

LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library 

我該如何解決這個問題?

+0

編輯您的原始問題添加更多的細節,而不是重複的問題。如果你更新了這個問題,它會被移回到首頁。或者,添加賞金以獲得更多關注。 – tvanfosson 2009-06-01 14:58:58

回答

5

您不能混合使用C運行時庫。如果你有一個庫或對象編譯/ MT(任何),你不能只與/ MD鏈接。您需要鏈接到線程安全的MSVCRT。沒有如果和但或只是關於它。你不能混合C運行時。即使在不使用線程的程序中,我總是發現它最好,只是使用/ MT。

您是否運行過項目清理操作來刪除已經建好的對象和庫?在這裏你也依賴於SQLite,你是否也重建過它?

1

當庫的靜態C++一堆鏈接都在一起,他們都必須有/ MTD或它們都必須與/ MTD與/ MDD

另一個項目/MDd.You不能鏈接項目這可能是您的鏈接錯誤的原因。你只在你的主要項目上得到它的原因是你的主要項目是唯一真正做鏈接的項目。請告訴我們它是否解決了你的問題。

我記得我曾經有與/ MTD和/ MDd相同的問題,我有非常類似的錯誤。

0

我的回答here可能有一些幫助,鏈接到一些MSDN文章,我發現在解決我的這個問題的版本非常有用。