linux 靜態庫和動態庫(3)

2021-07-22 14:37:55 字數 988 閱讀 8561

公共函式製成函式庫

函式庫是編譯時完成的,鏈結成乙個可執行檔案。程式執行時,不用用到函式庫,因為需要的函式已經拷到相應檔案下。—–靜態庫(***.a)

把對一些庫函式的鏈結載入推遲到程式執行的時期—–動態鏈結庫(***.so)

區別靜態庫

動態庫編譯階段

需要的**連線進可執行程式

需要函式時,函式對映找到函式調入堆疊執行

可執行檔案大小

大小(要附帶動態庫)

效率較快慢

動態庫優點(c庫採用動態庫)

- 程序之間資源共享(呼叫乙個函式會先檢視所有正在執行的程式,看記憶體是否有此函式的拷貝,有的話就共享此拷貝,沒有才鏈結。可以節省記憶體)

- 程式公升級簡單(只需公升級動態庫,無需重新編譯鏈結)

- 由程式設計師決定需求鏈結,高效

建立三個檔案

/*main.c*/

#include

#include

"my.h"

int main()

/*my.h*/

#include

#include

"my.h"

int main()

/*my.c*/

#include

#include

"my.h"

void func()

//靜態庫.a(編譯時,一次編譯,永久執行)

1.gcc -c my.c -o my.o

2.ar rcs libmy.a my.o

3.靜態庫編譯:#gcc main.c -lmy

-l.(.表示當前目錄查詢靜態庫)

//動態庫.so(執行時,執行時才會找庫)

1.gcc -c my.c -o my.o

2.gcc –shared –fpic my.o –o libmy.so

3.gcc test.c -lmy-l.

4../out

linux 靜態庫和動態庫

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 libsha...

Linux 靜態庫和動態庫

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

Linux 靜態庫和動態庫

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