Linux下動態鏈結庫的使用

2021-06-12 05:57:28 字數 1213 閱讀 3103

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, 

"print

"); 

//定位動態鏈結庫中的函式

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 前言 在實際開發過程中,各個模組之間會涉及到一些通用的功能,比如讀寫檔案,查詢 排序。為了減少 的冗餘,提高 的質量,可以將這些通用的部分提取出來,做出公共的模組庫。通過動態鏈結庫可以實現多個模組之間共享公共的函式。之前看 程式設計師的自我修養 中講到程式的鏈結和裝入過程,這些玩意都是底層的,對...