C語言使用動態鏈結庫靜態鏈結庫

2021-09-27 10:41:03 字數 1934 閱讀 9011

(1)每個 c 語言原始檔被編譯後生成目標檔案,這些目標檔案最終要被鏈結在一起生成可執

行檔案。 

(2)鏈結器的主要作用是把各個模組之間相互引用的部分處理好,使得各個模組之間能夠正

確的銜接。 

由鏈結器在鏈結時將庫的內容直接加入到可執行程式中

①編譯靜態庫原始碼:gcc –c lib.c –o lib.o

②生成靜態庫檔案:ar –q lib.a lib.o //將 lib.o 與其他檔案打包到 lib.a 中

③使用靜態庫編譯:gcc main.c lib.a –o main.out

可執行程式在執行時才動態載入庫進行鏈結 ,庫的內容不會進入可執行程式當中

①編譯動態庫原始碼:gcc –shared dlib.c –o dlib.so

②使用動態庫編譯:gcc main.c -ldl –o main.out

為了使程式方便擴充套件,具備通用性,可以採用外掛程式形式。採用非同步事件驅動模型,保證主程式邏輯不變,將各個業務已動態鏈結庫的形式載入進來,這就是所謂的外掛程式。linux提供了載入和處理動態鏈結庫的系統呼叫,非常方便。 

①開啟動態庫:dlopen

③關閉動態庫:dlclose

dlib.c 庫 

char* name()

int add(int a, int b)

test.c

#include
#include

int main()

//關閉動態庫

dlclose(pdlib);

}else

return 0;

}gcc -shared dlib.c -o dlib.so

gcc test.c -o test.o -ldl

(1)每個 c 語言原始檔被編譯後生成目標檔案,這些目標檔案最終要被鏈結在一起生成可執

行檔案。 

(2)鏈結器的主要作用是把各個模組之間相互引用的部分處理好,使得各個模組之間能夠正

確的銜接。 

由鏈結器在鏈結時將庫的內容直接加入到可執行程式中

①編譯靜態庫原始碼:gcc –c lib.c –o lib.o

②生成靜態庫檔案:ar –q lib.a lib.o //將 lib.o 與其他檔案打包到 lib.a 中

③使用靜態庫編譯:gcc main.c lib.a –o main.out

可執行程式在執行時才動態載入庫進行鏈結 ,庫的內容不會進入可執行程式當中

①編譯動態庫原始碼:gcc –shared dlib.c –o dlib.so

②使用動態庫編譯:gcc main.c -ldl –o main.out

為了使程式方便擴充套件,具備通用性,可以採用外掛程式形式。採用非同步事件驅動模型,保證主程式邏輯不變,將各個業務已動態鏈結庫的形式載入進來,這就是所謂的外掛程式。linux提供了載入和處理動態鏈結庫的系統呼叫,非常方便。 

①開啟動態庫:dlopen

③關閉動態庫:dlclose

dlib.c 庫 

C語言使用動態鏈結庫靜態鏈結庫

1 每個 c 語言原始檔被編譯後生成目標檔案,這些目標檔案最終要被鏈結在一起生成可執 行檔案。2 鏈結器的主要作用是把各個模組之間相互引用的部分處理好,使得各個模組之間能夠正 確的銜接。由鏈結器在鏈結時將庫的內容直接加入到可執行程式中 編譯靜態庫原始碼 gcc c lib.c o lib.o 生成靜...

動態鏈結庫 靜態鏈結庫

包含標頭檔案和庫 idir 指定編譯查詢標頭檔案的目錄,常用於查詢第三方的庫的標頭檔案,例 gcc test.c i.inc o test。ldir 指定鏈結時查詢lib的目錄,常用於查詢第三方庫。llibrary 指定額外鏈結的lib庫 巨集定義 dmacro 以字串 1 預設值 定義 macro...

靜態鏈結庫 動態鏈結庫

庫是寫好的現有的,成熟的,可以復用的 現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種 靜態庫 a lib 和動態庫 so dll windows上對應的是.lib dll ...