linux下的靜態鏈結庫,做起來比較容易,只要將目標檔案用ar打包就可以,下面寫一下動態鏈結庫的製作和使用方法,完全是根據個人理解和經驗總結,有不對的地方還請大家指正。
動態鏈結庫的生成:
**上與寫靜態鏈結庫沒什麼區別,主要是在編譯時,以兩個檔案舉例:
mylib.h
*/void
print();
/*mylib.c
*/#include
<
stdio.h
>
#include
"mylib.h
"void
print()
編譯方法如下:
gcc -fpic -shared mylib.c -o mylib.so
此時將生成mylib.so動態鏈結庫檔案。
動態鏈結庫在使用時,分為「隱式呼叫」和「顯式呼叫」兩種,如果是隱式呼叫,則與靜態庫的使用方法差不多,注意需要包含匯出函式的標頭檔案,即mylib.h:
#include
<
stdio.h
>
#include
"mylib.h
"int
main()
編譯方法:
gcc -o main main.c -l./ mylib.so
注意要加上動態鏈結庫的搜尋路徑,否則編譯器只會到系統路徑中去尋找。
顯式呼叫的方式,不必包含mylib.h,但是需要增加幾個系統呼叫:
#include
<
stdio.h
>
#include
<
dlfcn.h
>
//顯式載入需要用到的標頭檔案
intmain()
void(*
print)()
=dlsym(pdlhandle,
");
//定位動態鏈結庫中的函式
if(
!print )
print();
//呼叫動態鏈結庫中的函式
dlclose(pdlhandle);
//系統動態鏈結庫引用數減1
return0;
} 看一下顯式呼叫的編譯方式:
gcc -ldl -o main main.c
注意要新增-ldl選項,以使用顯式呼叫相關的函式呼叫。
**:
Linux下動態鏈結庫和靜態鏈結庫
第一部分 編譯過程 預處理過程,負責標頭檔案展開,巨集替換,條件編譯的選擇,刪除注釋等工作。gcc e表示進行預處理。編譯過程,負載將預處理生成的檔案,經過詞法分析,語法分析,語義分析及優化後生成彙編檔案。gcc s表示進行編譯。彙編,是將彙編 轉換為機器可執行指令的過程。通過使用gcc c或者as...
Linux動態鏈結庫的使用
1 前言 在實際開發過程中,各個模組之間會涉及到一些通用的功能,比如讀寫檔案,查詢 排序。為了減少 的冗餘,提高 的質量,可以將這些通用的部分提取出來,做出公共的模組庫。通過動態鏈結庫可以實現多個模組之間共享公共的函式。之前看 程式設計師的自我修養 中講到程式的鏈結和裝入過程,這些玩意都是底層的,對...
Linux動態鏈結庫的使用
1 前言 在實際開發過程中,各個模組之間會涉及到一些通用的功能,比如讀寫檔案,查詢 排序。為了減少 的冗餘,提高 的質量,可以將這些通用的部分提取出來,做出公共的模組庫。通過動態鏈結庫可以實現多個模組之間共享公共的函式。之前看 程式設計師的自我修養 中講到程式的鏈結和裝入過程,這些玩意都是底層的,對...