vs2010靜態鏈結MFC庫報鏈結錯誤

2022-07-09 21:18:14 字數 737 閱讀 1122

由於需要將mfc程式在其它電腦上執行,所以需要將動態鏈結的mfc改成靜態鏈結,本以為很簡單,沒想到鏈結的時候出現下面的鏈結錯誤:

uafxcw.lib(afxmem.obj) : error lnk2005: "void * __cdecl operator new(unsigned int)" (??2@yapaxi@z) already defined in libcmt.lib(new.obj)

uafxcw.lib(afxmem.obj) : error lnk2005: "void __cdecl operator delete(void *)" (??3@yaxpax@z) already defined in libcmt.lib(delete.obj)

在網上找了下原因,說是crt庫對new、delete 和 dllmain 函式使用弱外部鏈結。mfc 庫也包含 new、delete 和 dllmain 函式。這些函式要求先鏈結 mfc 庫,然後再鏈結 crt 庫。當 c 執行時 (crt) 庫和 microsoft 基礎類 (mfc) 庫的鏈結順序有誤時,可能會出現上面的錯誤。

網上的解決方法試了很多都會報錯,後來根據上面報錯的資訊,上面報錯是先鏈結了libcmt.lib,再鏈結uafxcw.lib。可不可以先鏈結uafxcw.lib,再鏈結libcmt.lib呢?抱著這個想法試了下,果然成功了~~~

vs2010靜態鏈結Qt

先按照這個帖子弄好靜態庫 注意原文中config那一步最後乙個 輸入成了中文狀態下的 正確的如下 configure debug and release fast static platform win32 msvc2010 no qt3support script scripttools qt z...

採用VS2010建立靜態鏈結庫

1 工程的建立 選擇win32專案,輸入工程名 在應用程式設定中選擇 靜態庫 選項 這樣就完成了工程的建立 2 新增兩個檔案,乙個為lib.cpp,另乙個為標頭檔案lib.h。我們所編寫的函式放在lib.cpp,而其原型放在lib.h。這兩個檔案的內容為 include lib.h int add ...

VS2010靜態編譯

因為需要在其他電腦上執行.exe檔案,會有缺dll。所以需要靜態編譯生成.exe可執行檔案。在網上查詢了一下vs2010靜態編譯生成.exe的方法,有很多,試了其中一種,記錄一下,以便今後查閱。感謝提供方法的大神們!設定 1 專案 配置屬性 常規 mfc的使用 在靜態庫中使用mfc 如果有使用mfc...