本文主要分析和解決編譯連接時產生的 LNK2005 錯誤。微信
【錯誤信息】:函數
mfcs90ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in MSVCRTD.lib(dllmain.obj)學習
【分析緣由】:.net
這篇文章:《在Visual C++中以錯誤的順序連接CRT庫和MFC庫時出現LNK2005錯誤》詳細分析和說明了產生這種錯誤的緣由。命令行
簡單地說,就是產生錯誤的工程同時使用了CRT庫和MFC庫,而且連接順序不對,CRT 庫對 new、delete 和 DllMain 函數使用弱外部連接。MFC 庫也包含 new、delete 和 DllMain 函數。這些函數要求先連接 MFC 庫,而後再連接 CRT 庫。blog
【解決方法】:get
在「項目 -> 屬性 -> 連接器 -> 命令行」欄中,輸入 /verbose:lib編譯參數,這樣,就能夠在output窗口看到連接時搜索的庫的前後順序,對於本問題,你必定能夠看到相似下面的前後輸出:博客
由此能夠看出,默認狀況下,先連接了CRT庫MSVCRTD.lib,而後連接的是MFC的庫mfcs90ud.lib,所以,須要強制改變一下它們的連接順序。
選擇「項目 -> 屬性 -> 連接器 -> 輸入」欄,在其中的「忽略特定的庫」這一欄輸入:MSVCRTD.lib mfcs90ud.lib, 而後,在「附加庫」這一欄中輸入: mfcs90ud.lib MSVCRTD.lib 問題便可解決。微博
【知識擴展】:
順便普及一下編譯參數/VERBOSE的其餘用法。 編譯
免費學習更多精品課程,登陸樂搏學院官網http://www.learnbo.com/
或關注咱們的官方微博微信,還有更多驚喜哦~
本文出自 「Jhuster的專欄」 博客,請務必保留此出處http://ticktick.blog.51cto.com/823160/571350