在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...