[转]在Visual C++中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误
癥狀
當 C 運行時 (CRT) 庫和 Microsoft 基礎類 (MFC) 庫的鏈接順序有誤時,可能會出現以下 LNK2005 錯誤之一: nafxcwd.lib...
當 C 運行時 (CRT) 庫和 Microsoft 基礎類 (MFC) 庫的鏈接順序有誤時,可能會出現以下 LNK2005 錯誤之一:
nafxcwd.lib(afxmem.obj) :error LNK2005:
"void * __cdecl operator new(unsigned int)"(??2@YAPAXI@Z) already
defined in LIBCMTD.lib(new.obj)
nafxcwd.lib(afxmem.obj) :error LNK2005:
"void __cdecl operator delete(void *)"(??3@YAXPAX@Z) already defined
in LIBCMTD.lib(dbgnew.obj)
nafxcwd.lib(afxmem.obj) :error LNK2005:
"void * __cdecl operator new(unsigned int,int,char const *,int)"
(??2@YAPAXIHPBDH@Z) already defined in LIBCMTD.lib(dbgnew.obj)
mfcs40d.lib(dllmodul.obj):error LNK2005:_DllMain@12 already defined in
MSVCRTD.LIB (dllmain.obj)
mfcs42d.lib(dllmodul.obj):error LNK2005:_DllMain@12 already defined in
msvcrtd.lib(dllmain.obj)
原因
CRT 庫對 new、delete 和 DllMain 函數使用弱外部鏈接。MFC 庫也包含 new、delete 和 DllMain 函數。這些函數要求先鏈接...
CRT 庫對 new、delete 和 DllMain 函數使用弱外部鏈接。MFC 庫也包含 new、delete 和 DllMain 函數。這些函數要求先鏈接 MFC 庫,然后再鏈接 CRT 庫。
解決方案
該問題有兩種解決方法。第一種方法是強制鏈接器按照正確的順序鏈接庫。第二種方法是由您親自查找導致問題的模塊并糾正它。注意:下列步驟基于 Visual C++ 6....
該問題有兩種解決方法。第一種方法是強制鏈接器按照正確的順序鏈接庫。第二種方法是由您親自查找導致問題的模塊并糾正它。
注意:下列步驟基于 Visual C++ 6.0 進行。
解決方案一:強制鏈接器按照正確的順序鏈接庫
注意:等效的鏈接器命令行是:/NOD:<library name>。
要在 Visual C++ .NET 中設置該選項,請閱讀“設置 Visual C++ 項目屬性”聯機幫助主題。
解決方案二:找到并糾正出現問題的模塊
要查看當前的庫鏈接順序,請按照下列步驟操作:
狀態
這種現象是設計導致的。
這種現象是設計導致的。
更多信息
使用 MFC 庫時,務必先鏈接它們,然后再鏈接 CRT 庫。這可以通過確保項目中的每個文件都首先包含 Msdev\Mfc\Include\Afx.h 來完成。直...
使用 MFC 庫時,務必先鏈接它們,然后再鏈接 CRT 庫。這可以通過確保項目中的每個文件都首先包含 Msdev\Mfc\Include\Afx.h 來完成。直接包含 (#include <Afx.h>) 或間接包含 (#include <Stdafx.h>) 都可以。Afx.h 包含文件會通過使用 #pragma comment (lib,"<libname>") 指令來強制采用庫的正確順序。
如果源文件的擴展名為 .c,或者該文件的擴展名為 .cpp 但不使用 MFC,則可以創建一個較小的頭文件 (Forcelib.h) 并將其放在模塊的頂端。這個新的頭文件可確保按照正確的順序搜索庫。
Visual C++ 不包含該頭文件。要創建此文件,請按照下列步驟操作:
在 Visual C++ .NET 中重現問題的步驟
int test()
{
new int;
return 1;
}
Q148652.cpp
Q148652Dlg.cpp
stdafx.cpp
?【參考資料 感謝作者】
?在 Visual C++ 中以錯誤的順序鏈接 CRT 庫和 MFC 庫時出現 LNK2005 錯誤
轉載于:https://www.cnblogs.com/ziwuge/archive/2011/12/25/2300884.html
總結
以上是生活随笔為你收集整理的[转]在Visual C++中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#匿名方法的用法
- 下一篇: [C++基础]025_虚函数和虚函数表