linux 靜態庫和動態庫

2021-07-26 01:28:40 字數 808 閱讀 2245

1. 生成方式

靜態庫:

首先將原始檔編譯成目標檔案:gcc –c test.c -o test.o

然後生成靜態庫:ar –rc libstatic.a test.o

共享庫:

首先將原始檔編譯成目標檔案:gcc –c test.c -o test.o

生成共享庫:gcc –fpic –shared –o libshared.so test.o

靜態庫的鏈結方法:

gcc –o software_name -l. –lstatic main.c(預設庫在當前資料夾)

共享庫的鏈結方法: 

gcc –o software_name -l. –lshared main.c(預設庫在當前資料夾)

2. 存在週期

靜態庫在程式編譯時會被連線到目標**中,程式執行時將不再需要該靜態庫。

動態庫在程式編譯時並不會被連線到目標**中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。

3.載入時間

二者的不同點在於**被載入的時刻不同。

靜態庫的**在

編譯過程

中已經被載入可執行程式,因此體積較大。

共享庫的**是在

可執行程式執行時

才載入記憶體的,在編譯過程中僅簡單的引用,因此**體積較小。

4.如何使用

靜態庫直接編譯到程式裡面;

動態庫可以通過設定環境變數來告知其位址使用:

export ld_library_path='/home/lib'

注意:若靜態庫和動態庫同名, gcc命令將優先使用動態庫。

Linux 靜態庫和動態庫

庫有兩種,一種是靜態鏈結庫,一種是動態鏈結庫,不管是哪一種庫,要使用它們,都要在程式中包含相應的include標頭檔案。我們先來回顧一下程式編譯的過程。如下圖 庫 本質乙個目標檔案,這個檔案的字尾有兩種格式,對應兩種庫 缺點是 檔案太大。多次拷貝庫程式,不僅浪費空間,而且檔案體積大 下面實現乙個靜態...

Linux 靜態庫和動態庫

我們指定c程式從 到乙個可執行程式需要經過預處理 編譯 彙編 鏈結。而最後一步鏈結又分為動態鏈結與靜態鏈結。靜態鏈結相當於就是講所要鏈結的庫提前放入鏈結的檔案,這樣子的檔案體積較大,但是可移植性較高。而動態鏈結是在執行的時候才去主動鏈結所需要鏈結的庫,這樣的 體積較小,多個程式共同使用庫的 我們li...

linux靜態庫和動態庫

我們通常把一些公用函式製作成函式庫,供其它程式使用。函式庫分為靜態庫和動態庫兩種。靜態庫在程式編譯時會被連線到目標 中,程式執行時將不再需要該靜態庫。動態庫在程式編譯時並不會被連線到目標 中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。靜態庫 是在可執行程式執行之前就已經加入到執行 ...