2011-03-21 24 views
8

如何檢查Windows中的靜態庫(.lib)鏈接到哪個運行時庫?驗證庫(.lib)中使用的CRT

我編譯我的/ MDD項目,我相信我鏈接到使用庫/ MTD多線程調試

Error 7 error LNK2005: "public: __thiscall std::_Lockit::~_Lockit(void)" ([email protected]@@[email protected]) already defined in libcpmtd.lib(xlock.obj) C:\...\msvcprtd.lib(MSVCP100D.dll) 

LIBCPMTD.LIB =多線程,靜態鏈接

我知道有一個選項/NODEFAULTLIB:"libcpmtd.lib",我已經試過併成功了,但我寧願避免這種情況。

回答

5

我能解決這個問題做如下

> dumpbin /DIRECTIVES C:\..\ThirdParty\tidy\windows\lib\libtidy 
.lib 
Microsoft (R) COFF/PE Dumper Version 10.00.40219.01 
Copyright (C) Microsoft Corporation. All rights reserved. 


Dump of file C:\..\ThirdParty\tidy\windows\lib\libtidy.lib 

File Type: LIBRARY 

    Linker Directives 
    ----------------- 
    /DEFAULTLIB:"LIBCMT" 
    /DEFAULTLIB:"OLDNAMES" 
... 

這是克利鏈接到MT。我使用/ MDd重新編譯了這個lib,並且它鏈接正常。

0

由於CRT的MSVPRTD.LIB is the importlib of the dynamic link library,而你明確的要求鏈接到CRT 靜態有什麼不對勁與您的構建鏈

您可能想要檢查項目文件是否存在矛盾。

+0

我試圖編譯的項目是使用/ MDd這是正確的設置。我試圖鏈接到的東西是使用/ MT(d)靜態或不是。 Visual Studio 2010如何幫助檢測鏈接到哪個庫的CRT有衝突?有沒有選擇手動檢查所有的項目文件? – 2011-03-21 09:51:20