mfcs100ud.lib(dllmodul.obj) : error LNK2005: [email
阿新 • • 發佈:2018-11-19
今天用VC2010寫一個用了MFC的規則DLL,編譯時報告如題錯誤。
必應後發現這篇文章 error LNK2005: [email protected] 已經在 MSVCRTD.lib(dllmain.obj) 中定義
http://wanglimin2004.blog.163.com/blog/static/1154884982012393174875/
為防止連線失效,把內容摘抄如下:
這篇文章:《在Visual C++中以錯誤的順序連結CRT庫和MFC庫時出現LNK2005錯誤》詳細分析和說明了產生這種錯誤的原因。
簡單地說,就是產生錯誤的工程同時使用了CRT庫和MFC庫,並且連結順序不對,CRT 庫對 new、delete 和 DllMain 函式使用弱外部連結。MFC 庫也包含 new、delete 和 DllMain 函式。這些函式要求先連結 MFC 庫,然後再連結 CRT 庫。
【解決方法】:
在“專案 -> 屬性 -> 連結器 -> 命令列”欄中,輸入 /verbose:lib編譯引數,這樣,就可以在output視窗看到連結時搜尋的庫的先後順序,對於本問題,你一定可以看到類似下面的先後輸出:
> Searching D:\vs2008\VC\lib\MSVCRTD.lib:
> Searching D:\vs2008\VC\atlmfc\lib\mfcs90ud.lib:
由此可以看出,預設情況下,先連結了CRT庫MSVCRTD.lib,然後連結的是MFC的庫mfcs90ud.lib,因此,需要強制改變一下它們的連結順序。
選擇“專案 -> 屬性 -> 連結器 -> 輸入”欄,在其中的“忽略特定的庫”這一欄輸入:MSVCRTD.lib mfcs90ud.lib, 然後,在“附加庫”這一欄中輸入: mfcs90ud.lib MSVCRTD.lib 問題即可解決。
我用的是vc2010, 專案 | 屬性 | 配置屬性 | 連結器 | 輸入,忽略特定預設庫=MSVCRTD.lib;mfcs100ud.lib
附加依賴項=mfcs100ud.lib;MSVCRTD.lib