• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            elva

            在 Visual C++ 中以錯誤的順序鏈接 CRT 庫和 MFC 庫時出現 LNK2005 錯誤解決方案

            癥狀

            當 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 庫對 newdeleteDllMain 函數使用弱外部鏈接。MFC 庫也包含 newdeleteDllMain 函數。這些函數要求先鏈接 MFC 庫,然后再鏈接 CRT 庫。

            解決方案

            該問題有兩種解決方法。第一種方法是強制鏈接器按照正確的順序鏈接庫。第二種方法是由您親自查找導致問題的模塊并糾正它。

            注意:下列步驟基于 Visual C++ 6.0 進行。

            解決方案一:強制鏈接器按照正確的順序鏈接庫

            1. 在“項目”菜單上,單擊“設置”。
            2. 在“項目設置”對話框的“以下項目的設置”視圖中,單擊以選中出現鏈接錯誤的項目配置。
            3. 在“鏈接”選項卡上,單擊以選中“類別”組合框中的“輸入”。
            4. 在“忽略庫”框中,插入庫名(例如,Nafxcwd.lib;Libcmtd.lib)。

            注意:等效的鏈接器命令行是:/NOD:<library name>
            5. 在“對象/庫模塊”框中,插入庫名。必須確保這些庫按順序列出,而且是行中的前兩個庫(例如,Nafxcwd.lib 和 Libcmtd.lib)。
            要在 Visual C++ .NET 中設置該選項,請閱讀“設置 Visual C++ 項目屬性”聯機幫助主題。

            解決方案二:找到并糾正出現問題的模塊

            要查看當前的庫鏈接順序,請按照下列步驟操作:
            1. 在“項目”菜單上,單擊“設置”。
            2. 在“項目設置”對話框的“以下項目的設置”視圖中,單擊以選中出現鏈接錯誤的項目配置。
            3. 在“鏈接”選項卡上的“項目選項”框中鍵入 /verbose:lib
            4. 重新生成項目。在鏈接過程中,這些庫將在輸出窗口中列出。

            狀態

            這種現象是設計導致的。

            更多信息

            使用 MFC 庫時,務必先鏈接它們,然后再鏈接 CRT 庫。這可以通過確保項目中的每個文件都首先包含 MsdevMfcIncludeAfx.h 來完成。直接包含 (#include <Afx.h>) 或間接包含 (#include <Stdafx.h>) 都可以。Afx.h 包含文件會通過使用 #pragma comment (lib,"<libname>") 指令來強制采用庫的正確順序。

            如果源文件的擴展名為 .c,或者該文件的擴展名為 .cpp 但不使用 MFC,則可以創建一個較小的頭文件 (Forcelib.h) 并將其放在模塊的頂端。這個新的頭文件可確保按照正確的順序搜索庫。

            Visual C++ 不包含該頭文件。要創建此文件,請按照下列步驟操作:
            1. 打開 MsdevMfcIncludeAfx.h。
            2. 選定 #ifndef _AFX_NOFORCE_LIBS 和 #endif //!_AFX_NOFORCE_LIBS 之間的行。
            3. 將選定部分復制到 Windows 剪貼板。
            4. 創建一個新文本文件。
            5. 將剪貼板的內容粘貼到這個新文件中。
            6. 將該文件另存為 MsdevMfcIncludeForcelib.h。
            以上內容轉字msdn

            posted on 2007-08-17 18:07 葉子 閱讀(411) 評論(0)  編輯 收藏 引用 所屬分類: C\C++

            一本综合久久国产二区| 天天躁日日躁狠狠久久| 亚洲国产精品久久久久网站| 国内精品久久久人妻中文字幕| 久久99国产精品99久久| 国产农村妇女毛片精品久久| 久久天天躁狠狠躁夜夜不卡 | 狠狠综合久久综合88亚洲| 亚洲中文久久精品无码ww16| 伊人久久综在合线亚洲2019| 尹人香蕉久久99天天拍| 久久本道伊人久久| 久久99久久99精品免视看动漫| 久久不射电影网| 久久精品国产99国产精品亚洲| 精品久久久久久99人妻| 无码人妻久久久一区二区三区| 久久综合色区| 国产成人无码精品久久久免费 | 国产精品久久午夜夜伦鲁鲁| 久久精品无码一区二区三区日韩 | 国产一久久香蕉国产线看观看| 思思久久99热免费精品6| 国产精品久久久久久福利漫画| 久久WWW免费人成一看片| 久久综合精品国产一区二区三区| 日本精品久久久久中文字幕 | 91亚洲国产成人久久精品网址| 无码专区久久综合久中文字幕| 亚洲&#228;v永久无码精品天堂久久 | 99国内精品久久久久久久| 嫩草伊人久久精品少妇AV| 国产精品久久婷婷六月丁香| 亚洲精品NV久久久久久久久久| 久久综合五月丁香久久激情| 久久夜色精品国产| 欧美色综合久久久久久| 亚洲精品无码久久毛片| 久久亚洲中文字幕精品一区| 久久久久99这里有精品10| 久久人人爽人人爽人人片av麻烦|