2011-09-19 28 views
7

我有一個大而複雜的項目,最終得到單元測試。我已經在Visual Studio 2010本地構建了googleTest 1.6.0,這是由README指定的使用cmake構建的項目文件。在VS2010中鏈接googleTest導致LNK2005因爲其他依賴庫

該項目有許多靜態和動態鏈接的相關庫。其中許多是專有的。所有嘗試鏈接都會生成220個這樣的錯誤。這裏是一個採樣:

msvcprtd.lib(MSVCP100D.dll):錯誤LNK2005: 「市民:無效__cdecl的std :: _ Container_base12 :: _ Orphan_all(無效)」?(_Orphan_all @ _Container_base12 @ STD (gtest-all.obj)中已經定義的文件(@@ QEAAXXZ)

libcpmtd.lib(cerr.obj):error LNK2005:「protected:char * __cdecl std :: basic_streambuf> :: _ Gndec(void)已經在msvcprtd.lib(MSVCP100D.dll)中定義的(?_Gndec @?$ basic_streambuf @ DU?$ char_traits @ D @ std @@@ std @@ IEAAPEADXZ)

LIBCMTD.lib(setlo cal.obj):錯誤LNK2005:已經在MSVCRTD.lib中定義了_configthreadlocale(MSVCR100D.dll)

鏈接:警告LNK4098:defaultlib'MSVCRTD'與使用其他庫相沖突;使用/ NODEFAULTLIB:庫 LINK:警告LNK4098:defaultlib'LIBCMTD'與使用其他庫相沖突;使用/ NODEFAULTLIB:庫

致命錯誤LNK1169:一個或多個多重定義符號找到

我已經試過了/ NODEFAULTLIB標誌,我嘗試了,只是msvcprtd.lib忽視,MSVCRTD.lib和LIBCMTD.lib,然後我遇到未解決的符號...

項目和googleTest都是用x64,/ MP,/ MDd和no/clr編譯的。

我一直在玩編譯器標誌,想知道是否有某種版本不匹配。在我理解的程度上,Dumpbin沒有暗示任何我可能理解的東西。我希望有一個呃

回答

10

它看起來像你的問題在Google Talk的FAQ回答。確保您的所有庫都使用/ MD(d)設置。

+1

原來你是對的。在我通過自己的試驗偶然發現答案之前,我忘記了我發佈了這個問題。 –

+0

雖然已經有幾年了,但是您是否可以將(現在)不正確的FAQ鏈接修復爲:https://github.com/google/googletest/blob/master/googletest/docs/FAQ.md#i-am-building-my - 項目與 - 谷歌 - 測試 - 在視覺工作室,和所有-IM-越來越-is-a的束團 - 的 - 接頭錯誤 - 或 - 警告 - 幫助 – PiJ