mfcs80ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 已經定義 的 解決方法



今天編譯一個MFC DLL, 鏈接時遇到 錯誤提示:

1>正在鏈接...
1>mfcs80ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 已經在 CapAudio.obj 中定義
1>   正在創建庫 ..\bin\CapAudio.lib 和對象 ..\bin\CapAudio.exp
1>..\bin\CapAudio.dll : fatal error LNK1169: 找到一個或多個多重定義的符號
1>生成日誌保存在“file://d:\work\VLC-custom\bin\CapAudio\Debug\BuildLog.htm”
1>CapAudio - 2 個錯誤,4 個警告

參考         http://blog.csdn.net/aastoneaa/article/details/7715221    的方法:


發現:

1>        已加載 mfcs80ud.lib(stdafx.obj)
1>      已找到 "class AFX_MODULE_STATE * __stdcall AfxGetStaticModuleState(void)" (?AfxGetStaticModuleState@@YGPAVAFX_MODULE_STATE@@XZ)
1>        已在 DllExport.obj 中引用
1>        已加載 mfcs80ud.lib(dllmodul.obj)
1>mfcs80ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 已經在 CapAudio.obj 中定義


MFC DLL 設置的 是  MFC EXT 方式, wizard生成的代碼中包括 DllMain(),  

但是輸出函數中,按照USERDLL的方式 使用了 

AFX_MANAGE_STATE(AfxGetStaticModuleState()) 導致的。

將這一句註釋即可。


可見:

   C/C++鏈接的時候是按照 .obj 進行的。一旦調用了lib中 某個.obj中的函數,這個obj中的其他函數都會參與鏈接函數命名衝突檢測。

   如果這個obj 中 沒有 任何被調用的函數, 則不參與命名衝突檢測





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章