error LNK2005: _DllMain@12 已經在 MSVCRTD.lib(dllmain.obj) 中定義


備注:我上次遇到這個問題是Win32 DLL項目中無意中include了afxwin.h,這個是MFC的頭文件,把這個include刪掉就解決了

 

================

轉自:http://ticktick.blog.51cto.com/823160/571350

 

本文主要分析和解決編譯鏈接時產生的 LNK2005 錯誤。

【錯誤信息】:

    mfcs90ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in MSVCRTD.lib(dllmain.obj)

【分析原因】:

    這篇文章:《在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  問題即可解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM