最近在作一個項目,有個工程叫COMMUtil(DLL工程).本來該項目中用的都是STL中的類。如今因爲用了一個第三方的一個日誌工具,裏面用到了CString等MFC提供的類,全部要加上對MFC的引用。
將本來的使用Windows庫改成在共享DLL中使用MFC. 可是編譯後會報錯。報錯內容以下:
----- 已啓動生成: 項目: COMMUtil, 配置: Debug Win32 ------
1>正在編譯...
1>COMMUtil.cpp
1>正在連接...
1>COMMUtil.obj : error LNK2005: _DllMain
@12 已經在 mfcs80d.lib(dllmodul.obj) 中定義
1>..\debug\COMMUtil.dll : fatal error LNK1169: 找到一個或多個多重定義的符號
1>生成日誌保存在「file://e:\COMM\COMMUtil\Debug\BuildLog.htm」
1>COMMUtil - 2 個錯誤,0 個警告
========== 生成: 0 已成功, 1 已失敗, 0 最新, 0 已跳過 ==========
解決辦法,當添加MFC庫時,在其中已經定義了DLLMAIN這個方法,全部須要將我COMMUtil.cpp文件中的DllMain
嘗試了一下。確實編譯經過
1>------ 已啓動生成: 項目: COMMUtil, 配置: Debug Win32 ------
1>正在編譯...
1>COMMUtil.cpp
1>正在連接...
1> 正在建立庫 ../lib/COMMUtil.lib 和對象 ../lib/COMMUtil.exp
1>正在嵌入清單...
1>生成日誌保存在「file://e:\COMM\COMMUtil\Debug\BuildLog.htm」
1>COMMUtil - 0 個錯誤,0 個警告
========== 生成: 1 已成功, 0 已失敗, 0 最新, 0 已跳過 ==========
其實看報錯的內容,也能看出來,說是_DllMain
@12 已經在 mfcs80d.lib(dllmodul.obj) 中定義,全部DLL工程中的DllMain函數能夠去掉了。