vs編譯動態鏈結庫的方法及使用

2021-08-31 09:33:12 字數 1462 閱讀 5283

1、編譯動態鏈結庫

(1)在vs中新建專案,把要編譯的動態鏈結庫新增到專案裡

(2)重新生成就行了,然後會在輸出目錄(debug)下生成dll檔案和lib檔案。坑:

(1)鏈結出現找不到 msvcrt_winxp.obj。

解決辦法:

2、配置專案屬性。也就是讓專案能找到相關的庫

(2)連線出現error lnk2019: 無法解析的外部符號 ___report_rangecheckfailure,該符號在函式 _obj_create_objects 中被引用

解決辦法:

__report_rangecheckfailure  是用來檢查堆疊快取溢位的,如果編譯的時候開啟gs(project property--》configuration properties--》c/c++--》code generation--》buffer security check)選項時(gs編譯選項解析),編譯器將為你加入檢測函式堆疊快取溢位錯誤額外**。具體實現在window下的執行時庫檔案msvcrt.dll中。而這些檢查堆疊快取溢位的**中在msvcrt11.dll及以後版本中都會呼叫到__report_rangecheckfailure 函式,所以當你用vs2010及以前版本進行開發,並使用了由vs2012及以後編譯器編譯的庫檔案時,在鏈結的時候就會報這樣的錯誤。

解決辦法:開啟專案屬性,c/c++——**生成——安全檢查——禁用安全檢查(gs)

2、使用動態鏈結庫

動態鏈結庫就是編譯出的dll檔案,乙個庫編譯以後有乙個lib檔案,乙個dll檔案,當然還有原來的.h檔案。使用動態鏈結庫就是使用者三個檔案

使用動態連線有兩種方式:顯示呼叫和隱式呼叫。這裡講隱式呼叫

隱式呼叫:要有lib,dll,h三個檔案

(1)將這三個檔案都複製到工程目錄下。

(2)把.h檔案新增進專案

(3)選中專案名稱右鍵——屬性——聯結器——常規——附加庫目錄——加上lib檔案所在的路徑

(4)選中專案名稱右鍵——屬性——聯結器——輸入——附加依賴性——加上lib檔案的名稱,比如mmpadpater.lib

注意:dll檔案要放到工程目錄下面

方法二:

(1)不用把lib,h檔案複製進工程目錄,但是要把dll考進來。

(2)選中專案名稱右鍵——屬性——c\c++——常規——附加包含目錄——加上.h檔案所在的路徑

(3)選中專案名稱右鍵——屬性——聯結器——常規——附加庫目錄——加上lib檔案所在的路徑

(4)選中專案名稱右鍵——屬性——聯結器——輸入——附加依賴性——加上lib檔案的名稱,比如mmpadpater.lib

方法三:

(1)將這三個檔案都複製到工廠目錄下。

(2)把lib檔案和h檔案都新增進專案。(新增是:選擇專案右鍵——新增現有項——選擇對應的lib和h檔案)

(3)此時不用去設定屬性了。直接就能用了。

總結:其實使用動態連線庫就是:把dll檔案放到工廠目錄下,讓專案找得到lib檔案和h檔案。

編譯CUDA動態鏈結庫及使用

除了直接在專案中使用cu或cuh來編寫cuda 之外,還可以將cuda相關操作 放在乙個dll專案中,將專案編譯成動態鏈結庫dll,然後在需要使用的專案中引用這個dll並呼叫其內部函式即可。現在新建乙個dll專案,專案名稱為test00302,如下圖所示 現在在專案中新建乙個名為test.cu的檔案...

VS使用c 的動態鏈結庫

1.在解決方案中新增乙個win32的新專案。2.在這個專案中新建乙個.cpp的檔案,在裡面寫上自己要呼叫的函式。在函式前要寫上extern c declspec dllexport 3.然後可以執行它,執行完會生成乙個.dll 動態鏈結庫 一般是在目錄下的 debug資料夾中。4.在想要呼叫這個函式...

GCC 編譯使用動態鏈結庫

動態鏈結庫 1.建立動態鏈結庫 複製 如下 include void hello 用命令gcc shared hello.c o libhello.so編譯為動態庫。可以看到,當前目錄下多了乙個檔案libhello.so。2.再編輯乙個測試檔案test.c,內容如下 複製 如下 include in...