c 生成的動態庫移到其他電腦上,動態庫不能執行

2021-09-17 22:09:02 字數 920 閱讀 5059

最近的乙個專案中遇到了乙個問題,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...