當鏈接我的發佈版本的DLL,我得到 -VC++/DEFAULTLIB問題
1> LINK:警告LNK4098:defaultlib 'mfc80d.lib' 與使用其他 庫衝突;使用/ NODEFAULTLIB:庫
1> LINK:警告LNK4098:defaultlib 'mfcs80d.lib' 與使用其他 庫衝突;使用/ NODEFAULTLIB:庫
1> LINK:警告LNK4098:defaultlib 'msvcrtd.lib'與其他庫的使用衝突 ;使用/ NODEFAULTLIB:庫
添加/冗長,我看到下面的(片段): ...
1>搜索d:\微軟的Visual Studio的 8 \ VC \ atlmfc \ LIB \ mfc80d.lib:
1> 找到 「公共:虛擬__thiscall AFX_MODULE_STATE ::〜AFX_MODULE_STATE(無效)」 (?? 1AFX_MODULE_STATE @@ @ UAE XZ)1>
在mfcs80.lib引用(dllmodul .OBJ ) 1>加載 mfc80d.lib(MFC80D.DLL)1>找到 「長STDCALL AfxWndProc(結構HWND__ *,無符號 整型,無符號整型,長)」 (?AfxWndProc @@ YGJPAUHWND __ @@ IIJ @ Z)
1> 在mfcs80.lib引用(dllmodul.obj) 1>加載 mfc80d.lib(MFC80D.DLL)
...
如果我正確解釋它,這意味着鏈接器以某種方式解析來自(優化)庫mfcs80的調用,作爲調用(非優化)庫mfc80D的調用。怎麼會這樣??
當我添加/NODEFAULTLIB:mfc80d.lib警告消失了,但我還沒有安靜。順便說一句,該模塊的增量鏈接確實遭受了零星的無法解釋的崩潰,只能通過重新構建來解決。我正在使用VS2005。
[編輯]將標題更改爲包含DEFAULTLIB,希望更好地將主題聚焦。我做看到一個明確的行話說
在/ VERBOSE輸出處理/DEFAULTLIB:mfc80d.lib
,許多其他(非調試)默認庫中。它從何而來?我怎樣才能解決這個問題?
謝謝!
感謝 - 但我檢查了所有項目(和所有個人文件),而且都用/ MD編譯。我有很少的外部依賴項:version.dll,shlwapi.dll和第三方組件,我使用dependency-walker進行了檢查,並且似乎與正確的CRT版本(非調試版)鏈接。/MD交換機是否是對/ DEFAULTLIB交換機的唯一訪問?沒有其他輸入可能會把它搞砸嗎? – 2010-07-08 14:57:14