靜態庫和動態庫的相關解釋

2021-09-01 12:14:11 字數 874 閱讀 7129

庫的作用

首先來看什麼是庫,庫(library)說白了就是一段編譯好的二進位制**,加上標頭檔案就可以供別人使用。 

什麼時候我們會用到庫呢?一種情況是某些**需要給別人使用,但是我們不希望別人看到原始碼,就需要以庫的形式進行封裝,只暴露出頭檔案。另外一種情況是,對於某些不會進行大的改動的**,我們想減少編譯的時間,就可以把它打包成庫,因為庫是已經編譯好的二進位制了,編譯的時候只需要 link 一下,不會浪費編譯時間。 

上面提到庫在使用的時候需要 link,link 的方式有兩種,靜態和動態,於是便產生了靜態庫和動態庫。 

靜態庫 

靜態庫即靜態鏈結庫(windows 下的 .lib,linux 和 mac 下的 .a)。之所以叫做靜態,是因為靜態庫在編譯的時候會被直接拷貝乙份,複製到目標程式裡,這段**在目標程式裡就不會再改變了。 

靜態庫的好處很明顯,編譯完成之後,庫檔案實際上就沒有作用了。目標程式沒有外部依賴,直接就可以執行。當然其缺點也很明顯,就是會使用目標程式的體積增大。 

動態庫 

動態庫即動態鏈結庫(windows 下的 .dll,linux 下的 .so,mac 下的 .dylib)。與靜態庫相反,動態庫在編譯時並不會被拷貝到目標程式中,目標程式中只會儲存指向動態庫的引用。等到程式執行時,動態庫才會被真正載入進來。 

動態庫的優點是,不需要拷貝到目標程式中,不會影響目標程式的體積,而且同乙份庫可以被多個程式使用(因為這個原因,動態庫也被稱作共享庫)。同時,編譯時才載入的特性,也可以讓我們隨時對庫進行替換,而不需要重新編譯**。動態庫帶來的問題主要是,動態載入會帶來一部分效能損失,使用動態庫也會使得程式依賴於外部環境。如果環境缺少動態庫或者庫的版本不正確,就會導致程式無法執行(linux 下喜聞樂見的 lib not found 錯誤)。 

庫(靜態庫和動態庫)

一 靜態庫 以c語言的形式生成庫 h中extern c int add int int extern c int sub int int 二.測試靜態庫 將.h和.lib放入 h ifdef cplusplus c 程式設計師用c的方式開啟 extern c int add int int exte...

靜態庫和動態庫

一。靜態庫 靜態庫的優點在於使用簡單,編譯快速。靜態庫在應用程式生成時,已經編譯成為可重定位的目標檔案,因此可以不必再編譯,節省編譯時間,以最短的時間生成可執行程式。步奏 a。建立靜態庫 1 在編輯器中編輯其靜態庫函式 static lib.c 2 在shell中編譯該原始檔,生成乙個可重定位的目標...

靜態庫和動態庫

靜態庫 lib 中相當於存放了所有的源 包括他引入的其他靜態lib檔案.其實是所有cpp編譯後對應的.obj檔案的打包 所以靜態lib都比較大。動態庫dll也有lib但是這個lib,只是用來幫助程式在鏈結時定位dll中的函式的位址的。所以會在exe載入時才重定位函式的位址。重定位就是根據鏈結的這個l...