首先介紹一下靜態庫(靜態鏈結庫)、動態庫(動態鏈結庫)的概念,首先兩者都是**共享的方式。
靜態庫:在鏈結步驟中,聯結器將從庫檔案取得所需的**,複製到生成的可執行檔案中,這種庫稱為靜態庫,其特點是可執行檔案中包含了庫**的乙份完整拷貝;缺點就是被多次使用就會有多份冗餘拷貝。即靜態庫中的指令都全部被直接包含在最終生成的 exe 檔案中了。在vs中新建生成靜態庫的工程,編譯生成成功後,只產生乙個.lib檔案
動態庫:動態鏈結庫是乙個包含可由多個程式同時使用的**和資料的庫,dll不是可執行檔案。動態鏈結提供了一種方法,使程序可以呼叫不屬於其可執行**的函式。函式的可執行**位於乙個 dll 中,該 dll 包含乙個或多個已被編譯、鏈結並與使用它們的程序分開儲存的函式。在vs中新建生成動態庫的工程,編譯成功後,產生乙個.lib檔案和乙個.dll檔案,建立動態庫要有
__declspec(dllexport)作為函式的字首:__declspec(dllexport) void test1();
那麼上述靜態庫和動態庫中的lib有什麼區別呢?
靜態庫中的lib:該lib包含函式**本身(即包括函式的索引,也包括實現),在編譯時直接將**加入程式當中
動態庫中的lib:該lib包含了函式所在的dll檔案和檔案中函式位置的資訊(索引),函式實現**由執行時載入在程序空間中的dll提供
總之,lib是編譯時用到的,dll是執行時用到的。如果要完成源**的編譯,只需要lib;如果要使動態鏈結的程式執行起來,只需要dll。
隱式鏈結 需要.**件,dll檔案,lib檔案
(1)將dll放到工程的工作目錄
(2)設定專案屬性--vc++目錄--庫目錄為lib所在的路徑
(4)在原始檔中新增.h標頭檔案
然後就像平常一樣呼叫普通函式、類、變數
使用靜態庫
需要.**件,lib檔案
(1)設定專案屬性--vc++目錄--庫目錄為lib所在的路徑
(3)在原始檔中新增.h標頭檔案
靜態庫動態庫
靜態庫動態庫 靜態庫 是在執行程式之前就已經加入到執行 中,成為執行程式的一部分來執行的,字尾名 a 動態庫 是在執行程式啟動時載入到執行 中,字尾名 so 靜態庫和動態庫區別 動態庫編譯速度慢,執行速度快,但是生成的程式體積較大,占用記憶體,然而動態庫較易公升級,就布局而言,動態庫 不易布局,執行...
靜態庫動態庫
我們使用ls l的時候看到的除了看到檔名,還看到檔案的元資料 擁有的許可權 硬鏈結數 檔案所有者 組 大小 檔案最後修改時間 檔名ls l讀取儲存在磁碟上的檔案資訊,然後顯示出來 其實這個資訊除了通過這種方式來讀取,還有乙個sata命令能夠看到更多的資訊 這裡寫描述 上面的執行結果有幾個資訊需要解釋...
靜態庫 動態庫
學習程式設計,要對編譯鏈結過程了然如胸。在鏈結階段,有兩種鏈結方式 靜態鏈結和動態鏈結。兩者最大的區別在於鏈結的時機不一樣,靜態鏈結是在形成可執行程式前,而動態鏈結的進行則是在程式執行時,下面來詳細介紹這兩種鏈結方式。一 靜態鏈結 然後使用ar工具生成a庫,指令如下 ar命令詳細介紹可以參考這篇部落...