最近的乙個專案中遇到了乙個問題,c++的乙個動態庫在我自己的電腦上可以被c#程式引用,我把程式安裝到其他電腦上出現了異常,提示找不到dll,偶然間發現我安裝vsc++,c#的程式就不會報錯。因為這個c++的動態庫是我根據c++的靜態庫自己封裝的。在查閱了資料之後,我嘗試著改變**生成的方式,居然成功了。記錄一下我的解決方案。
修改執行庫的模式為 mt模式,即可解決問題。
編譯選項
包含靜態鏈結的lib
說明/md
_mt、_dll
msvcrt.lib
多執行緒、release、dll版本的執行時庫
/mdd
_debug、_mt、_dll
msvcrtd.lib
多執行緒、debug、dll版本的執行時庫
/mt_mt
libcmt.lib
多執行緒、release版本的執行時庫
/mtd
_debug、_mt
libcmtd.lib
多執行緒、debug版本的執行時庫
簡單的說:
(1)/md,表示執行時庫由作業系統提供乙個dll,程式裡不整合。
(2)/mt,表示執行時庫由程式整合。
(1)程式就不需要靜態鏈結執行時庫,可以減小軟體的大小;
(2)所有的模組都採用/md,使用的是同乙個堆,不存在a堆申請,b堆釋放的問題;
(3)使用者機器可能缺少我們編譯時使用的動態執行時庫。(補充:如果我們軟體有多個dll,採用/mt體積增加太多,則可以考慮/md + 自帶系統執行時庫)
(1)有些系統可能沒有程式所需要版本的執行時庫,程式必須把執行時庫靜態鏈結上。
(2)減少模組對外界的依賴。
參考:
純C 動態庫生成
目錄 眾所周知,我們可以將c 專案中的類以及函式匯出,形成 dll 檔案,以供其他程式使用,下面將說明qt環境下的使用方法。首先建立共享庫,步驟如下 下一步會出現類對話方塊等等,不用管它,直接點選建立即可,稍後再將類都刪了。建立好以後你會發現有乙個包含global的標頭檔案,這個檔案中定義了 dec...
Visual Stdio 動態庫的生成
vs 下面生成動態庫時,只需要在專案嚮導中最後一步選擇是生成dll檔案或者在建立專案後在專案 屬性中設定生成的屬性為dll。關鍵是如何使用生成的dll。vs在生成dll時預設是不生成對應的導入庫lib的。需要自己定義需要匯入的函式。檔案型別為.def。def的新增方式為專案屬性 聯結器 輸入 模組定...
靜態庫與動態庫的生成
一.靜態庫 靜態庫 a 程式在編譯鏈結時候把庫的 鏈結到可執行 中,程式執行時將不再需要靜態庫。測試程式 add.h ifndef add h define add h int add int x,int y endif add.c include add.h int add int x,int y...