VC預設鏈結庫衝突

2021-06-27 14:40:36 字數 1562 閱讀 7644

在同乙個專案中,所有的原始檔必須鏈結相同的c執行時庫。如果某一檔案用了multithreaded dll版本,而其他檔案用了single-threaded或者multithreaded版本的庫,也就是說用了不同的庫,就會導致這個警告的出現。

總之,一句話,

lib之間有衝突。需要刪除匯入的一些

libs。 

版 本類 型使用的library

被忽略的library

r  release

單執行緒libc.lib

libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib

多執行緒libcmt.lib

libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib

使用dll的多執行緒

msvcrt.lib

libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib

d   debug

單執行緒libcd.lib

libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib

多執行緒libcmtd.lib

libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib

使用dll的多執行緒

msvcrtd.lib

libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib

例如:1、編譯release版本的單執行緒的工程,在linker的命令列加入如下的引數: /nodefaultlib:libcmt.lib /nodefaultlib:msvcrt.lib /nodefaultlib:libcd.lib /nodefaultlib:libcmtd.lib /nodefaultlib:msvcrtd.lib

2、執行時庫選擇/mt的多執行緒專案出現如下錯誤:

1>libcmt.lib(crt0init.obj) : warning lnk4098: 預設庫「msvcrt.lib」與其他庫的使用衝突;請使用 /nodefaultlib:library

1>  正在生成**

1>  已完成**的生成

1>msvcrt.lib(ti_inst.obj) : error lnk2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@aae@abv0@@z) 已經在 libcmt.lib(typinfo.obj) 中定義

解決:忽略預設庫msvcrt.lib

配置屬性-->鏈結器-->輸入-->忽略特定庫:msvcrt.lib

配置屬性-->鏈結器->命令列:/nodefaultlib:msvcrt.lib

VC 動態鏈結庫

mfc 一 建立dll 1 建立mfc動態鏈結庫,在第4部選擇 regular dll with mfc shared linked 型別,即建立與mfc動態鏈結的常規dll,可以被win32應用程式和mfc應用程式使用。2 新增函式。在生成的工程的test.h檔案中新增語句如下 extern c ...

VC 動態鏈結庫 DLL 程式設計

vc 動態鏈結庫 dll 程式設計 一 理解庫 vc 動態鏈結庫 dll 程式設計 二 非mfc dll vc 動態鏈結庫 dll 程式設計 三 mfc規則dll vc 動態鏈結庫 dll 程式設計 四 mfc擴充套件 dll vc 動態鏈結庫 dll 程式設計 五 dll典型例項 動態鏈結庫 dl...

eXosip生成動態鏈結庫 VC

exosip生成動態鏈結庫 vc exosip 是純c 的sip協議棧實現,高效,簡潔,是眾多sip軟終端的核心庫之一 本段文字記錄了編譯exosip dll的過程 2 unzip,進入libexosip2 3.3.0 platform vsnet,開啟工程檔案 3 改變工程型別 配置屬性 常規 專...