在實際開發過程中,各個模組之間會涉及到一些通用的功能,比如讀寫檔案,查詢、排序。為了減少**的冗餘,提高**的質量,可以將這些通用的部分提取出來,做出公共的模組庫。通過動態鏈結庫可以實現多個模組之間共享公共的函式。之前看《程式設計師的自我修養》中講到程式的鏈結和裝入過程,這些玩意都是底層的,對於理解程式的編譯過程有好處。博文介紹了程式的鏈結和裝入過程。本文重點在於應用,如何編寫和使用動態鏈結庫,後續使用動態鏈結庫實現乙個外掛程式。
2、動態鏈結庫生產
動態鏈結庫與普通的程式相比而言,沒有main函式,是一系列函式的實現。通過shared和fpic編譯引數生產so動態鏈結庫檔案。程式在呼叫庫函式時,只需要連線上這個庫即可。例如下面實現乙個簡單的整數四則運輸的動態鏈結庫,定義的caculate.h和caculate.c兩個檔案,生產libcac.so動態鏈結庫。
程式**如下:
/*caculate.h
*/#ifndef caculate_head_
#define caculate_head_
//加法
int add(int a, int
b);//
減法int sub(int a, int
b);//
除法int div(int a, int
b);//
乘法int mul(int a, int
b);#endif
/*caculate.c檔案*/編譯生產libcac.so檔案如下:gcc -shared -fpic caculate.c -o libcac.so#include "
caculate.h"//
求兩個數的和
int add(int a, int
b)//
減法int sub(int a, int
b)//
除法int div(int a, int
b)//
乘法int mul(int a, int
b)
編寫乙個測試程式呼叫此動態鏈結庫的函式,程式如下所示:
#include #include編譯生產可執行檔案main如下:gcc main.c -o main -l ./ -lcac"caculate.h
"int
main()
(其中-l指明動態鏈結庫的路徑,-l後是鏈結庫的名稱,省略lib)
程式執行結果如下所示:
linux下c語言程式設計,動態鏈結和靜態鏈結的理解
linux c語言開發 動態鏈結庫以及靜態鏈結庫程式設計簡單介紹 收藏 差不多可以認為,每個程式都鏈結到乙個或幾個庫上。任何乙個使用了c函式 諸如printf等 都須鏈結到c執行時庫。如果你的程式具有圖形介面 gui 它將被鏈結到視窗系統的庫。如果你的程式使用了資料庫,資料庫 商會提供給你一些簡化訪...
C語言使用動態鏈結庫靜態鏈結庫
1 每個 c 語言原始檔被編譯後生成目標檔案,這些目標檔案最終要被鏈結在一起生成可執 行檔案。2 鏈結器的主要作用是把各個模組之間相互引用的部分處理好,使得各個模組之間能夠正 確的銜接。由鏈結器在鏈結時將庫的內容直接加入到可執行程式中 編譯靜態庫原始碼 gcc c lib.c o lib.o 生成靜...
C語言使用動態鏈結庫靜態鏈結庫
1 每個 c 語言原始檔被編譯後生成目標檔案,這些目標檔案最終要被鏈結在一起生成可執 行檔案。2 鏈結器的主要作用是把各個模組之間相互引用的部分處理好,使得各個模組之間能夠正 確的銜接。由鏈結器在鏈結時將庫的內容直接加入到可執行程式中 編譯靜態庫原始碼 gcc c lib.c o lib.o 生成靜...