C 引用lib靜態庫的兩種方式

2021-10-02 06:24:24 字數 1965 閱讀 4873

#2、建立專案b使生成dll動態目標檔案

在標頭檔案projectb_dll.h中宣告,在實現檔案projectb_dll.cpp中實現,由於生成的dll動態庫檔案不是exe可執行檔案所以不能執行。

#3 建立專案c使生成可執行exe檔案

#4 使用專案a的靜態lib生成檔案的兩種方式

使用#pragma comment(lib,"***.lib")或者vs編譯器附加庫目錄+附加依賴項的方式都可以。

##4.1 在專案c的"stdafx.h"中引用專案a的標頭檔案"hello1.h",實現宣告的目的,這樣專案c所有#include 「stdafx.h」;了的.cpp都能達到宣告專案a中"hello1.h"中函式宣告的目的。當然也可以只宣告要呼叫的來自lib靜態庫的函式而不用包含宣告。然後在專案c的"stdafx.cpp"中引用專案a生成的lib靜態庫檔案"projecta_lib.lib",關於靜態庫lib檔案包含什麼以及與.cpp、.obj檔案的關係,詳見spring_24同學介紹dll和lib的區別,從而能在其中找到專案a的所有.cpp中函式實現,使編譯通過,然後在專案c的輸出的exe可執行檔案中存有所呼叫了的專案a中的函式定義,執行通過:

##4.2 仍然在專案c的"stdafx.h"中引用專案a的標頭檔案"hello1.h",實現宣告的目的,這樣專案c所有#include 「stdafx.h」;了的.cpp都能達到宣告專案a中"hello1.h"中函式宣告的目的。當然也可以只宣告要呼叫的來自lib靜態庫的函式而不用包含宣告。使用vs2010的專案屬性-附加庫目錄包含專案a的projecta_lib.lib靜態庫檔案所在目錄,注意資料夾符號是』『而不是從windows資源管理器中複製來的』/』:

使用vs2010的專案屬性-附加依賴項包含專案a的projecta_lib.lib靜態庫檔案:

編譯、執行通過:

#5 使用專案b的dll動態庫檔案

使用dll動態庫需要首先為編譯階段鏈結到dllexport匯出函式,這需要採用鏈結lib靜態庫檔案的方式將伴隨dll檔案一齊生成的同名.lib檔案首先鏈結,然後將專案b生成的dll拷貝到專案c生成的.exe可執行檔案所在目錄(必須是同目錄下,在上層目錄或子目錄中就會提示找不到帶dll動態庫檔案的錯誤!),則執行時exe會自動在其所在目錄中找尋與lib靜態庫檔案同名的dll並呼叫其中專案c要匯入的(同時專案b也予以匯出)的函式或變數:

將專案b生成的dll拷貝到專案c生成的.exe可執行檔案所在目錄(必須是同目錄下,在上層目錄或子目錄中就會提示找不到帶dll動態庫檔案的錯誤!)

dll的兩種呼叫方式,lib與dll區別

1 lib是編譯時需要的,dll是執行時需要的。如果要完成源 的編譯,有lib就夠了。如果也使動態連線的程式執行起來,有dll就夠了。在開發和除錯階段,當然最好都有。2 一般的動態庫程式有lib檔案和dll檔案。lib檔案是必須在編譯期就連線到應用程式中的,而dll檔案是執行期才會被呼叫的。如果有d...

C 兩種方式過載

c 中,可以用兩種方式過載方法 指定不同個數的引數 指定不同的引數型別 看理論有點摸不著頭 還是找兩個例子來理解.指定不同個數的引數例子 using system public class methodoverload public void calculate int intdeduct,int ...

Mysql遷庫的兩種方式

1.遷移data目錄下的對應庫的資料夾 在這裡需要複製的資料夾就是咱們需要遷移的資料庫名字 每個資料夾對應乙個資料庫 可以打包複製 這樣快一些 然後到目標資料夾再解壓,然後資料庫遷移成功!就是這麼簡單。適合資料量比較大的時候使用此方法,因為sql指令碼執行起來太慢,如果執行報錯還得重頭再來,比較bu...