在Linux作業系統下共享庫程式設計的方法介紹

2021-04-13 13:47:14 字數 1837 閱讀 5737

在linux作業系統下共享庫程式設計的方法介紹

一、說明

類似windows系統中的動態鏈結庫,linux中也有相應的共享庫用以支援**的復用。windows中為*.dll,而linux中為*.so。下面詳細介紹如何建立、使用linux的共享庫。

二、建立共享庫

在mytestso.c檔案中,**如下:

#include

#include

int getmax(int a, int b)

int getint(char* psztxt)

然後使用下列命令進行編譯:

gcc -fpic -shared mytestso.c -o mytestso.so

-fpic 使輸出的物件模組是按照可重定位位址方式生成的

編譯成功後,當前目錄下有mytestso.so,此時已成功建立共享庫mytestso.so。

三、使用共享庫

共享庫中的函式可被主程式載入並執行,但是不必編譯時鏈結到主程式的目標檔案中。主程式使用共享庫中的函式時,需要事先知道所包含的函式的名稱(字串),然後根據其名稱獲得該函式的起始位址(函式指標),然後即可使用該函式指標使用該函式。

在mytest.c檔案中,**如下:

#include

#include

int main(int argc, char* argv)

// get getmax func

getmax = dlsym(pdlhandle, "getmax");

pszerror = dlerror();

if (0 != pszerror)

// get getint func

getint = dlsym(pdlhandle, "getint");

pszerror = dlerror();

if (0 != pszerror)

// call fun

a = 200;

b = 600;

printf("max=%d", getmax(a, b));

printf("txt=%d", getint(psztxt));

// close mytestso.so

dlclose(pdlhandle);

} 然後使用如下命令進行編譯:

gcc mytest.c -ldl -o mytest

-ldl選項,表示生成的物件模組需要使用共享庫

(1)dlopen()

第乙個引數:指定共享庫的名稱,將會在下面位置查詢指定的共享庫。

-環境變數ld_library_path列出的用分號間隔的所有目錄。

-檔案/etc/ld.so.cache中找到的庫的列表,用ldconfig維護。

-目錄usr/lib。

-目錄/lib。

-當前目錄。

第二個引數:指定如何開啟共享庫。

-rtld_now:將共享庫中的所有函式載入到記憶體

-rtld_lazy:會推後共享庫中的函式的載入操作,直到呼叫dlsym()時方載入某函式

(2)dlsym()

呼叫dlsym時,利用dlopen()返回的共享庫的phandle以及函式名稱作為引數,返回要載入函式的入口位址。

(3)dlerror()

該函式用於檢查呼叫共享庫的相關函式出現的錯誤。

四、結束語

本文主要闡述了linux系統使用共享庫的程式設計問題,並通過乙個簡單的例項詳細說明。

本文**

linux路由配置 在Linux作業系統下

熟悉使用ifconfig 會非常方便。ifconfig eth0 新ip 一 修改ip位址 aeolus db1 network scripts vi ifcfg eth0 device eth0 onboot yes bootproto static ipaddr 219.136.241.211 ...

Linux作業系統下DriverDisk的製作方法

如果常常在ibm hp等這些伺服器上安裝linux,多多少少都會遇到需要手工載入scsi raid卡驅動情況,而我們遇到這種情況時,都會向硬體廠 商或者linux廠商需求驅動,因為幾乎所有的硬體廠商只提供redhat suse上的驅動,假如安裝的紅旗linux遇到這種情況,那麼就只能向紅旗 尋求驅動...

Linux作業系統上的檔案共享

共享檔案對乙個 團隊來說是非常重要的。團隊成員常常要在一台伺服器上共同完成乙個專案。這個時候就要實現不同使用者間的檔案共享。下面就詳細介紹一下實現過程 sudo groupadd workgroup sudo useradd g workgroup username sudo passwd user...