最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux動態(tài)加載并調(diào)用動態(tài)庫(.so)實(shí)現(xiàn)方式

 更新時間:2026年04月07日 08:56:27   作者:enjoy囂士  
本文介紹了加載動態(tài)鏈接庫的過程以及引用計數(shù)機(jī)制,并詳細(xì)描述了頭文件中相關(guān)函數(shù)的作用,還提供了編譯動態(tài)庫和主程序的命令,強(qiáng)調(diào)了鏈接選項的重要性

概念

加載動態(tài)鏈接庫,首先為共享庫分配物理內(nèi)存,然后在進(jìn)程對應(yīng)的頁表項中建立虛擬頁和物理頁面之間的映射。

你可以認(rèn)為系統(tǒng)中存在一種引用計數(shù)機(jī)制, 每當(dāng)一個進(jìn)程加載了共享庫(在該進(jìn)程的頁表中進(jìn)行一次映射),引用計數(shù)加一;

一個進(jìn)程顯式卸載(通過dlclose等)共享庫或進(jìn)程退出時,引用計數(shù)減 一,當(dāng)減少到0時,系統(tǒng)卸載共享庫。

頭文件

#include <dlfcn.h>

相關(guān)函數(shù)介紹

(1)打開動態(tài)鏈接庫:dlopen

函數(shù)原型
void *dlopen (const char *filename, int flag);
flag:分為這兩種 
RTLD_NOW:在dlopen返回前,解析出全部沒有定義的符號,解析不出來返回NULL。
RT_GLOBAL:動態(tài)庫定義的符號可被其后打開的其他庫解析。
RT_LOCAL:和上面相反,不能被其他庫解析。默認(rèn)。
RTLD_LAZY:暫緩決定,等有需要時再解出符號


返回值: 
打開錯誤返回NULL 
成功,返回庫引用 
dlopen用于打開指定名字(filename)的動態(tài)鏈接庫(最好文件絕對路徑),并返回操作句柄。

(2)取函數(shù)執(zhí)行地址:dlsym

函數(shù)原型
void *dlsym(void *handle, char *symbol); 
dlsym根據(jù)動態(tài)鏈接庫操作句柄(handle)與符號(symbol),返回符號對應(yīng)的函數(shù)的執(zhí)行代碼地址。

(3)關(guān)閉動態(tài)鏈接庫:dlclose

函數(shù)原型
int dlclose (void *handle); 
returns 0 on success, and nonzero on error.
dlclose用于關(guān)閉指定句柄的動態(tài)鏈接庫,只有當(dāng)此動態(tài)鏈接庫的使用計數(shù)為0時,才會真正被系統(tǒng)卸載。

(4)動態(tài)庫錯誤函數(shù):dlerror

函數(shù)原型
const char *dlerror(void);
當(dāng)動態(tài)鏈接庫操作函數(shù)執(zhí)行失敗時,dlerror可以返回出錯信息,返回值為NULL時表示操作函數(shù)執(zhí)行成功。

示例

#include <stdio.h>  
#include <dlfcn.h>  
  
int main(int argc, char **argv) {  
	void *handle;  
	double (*cosine)(double);  
	char *error;  
  
	handle = dlopen ("/tmp/libtest.so", RTLD_LAZY);  
	if (!handle) {  
		fprintf (stderr, "%s ", dlerror());  
		exit(1);  
	}  
  
	cosine = (double(*)(double))dlsym(handle, "cos");  
	if ((error = dlerror()) != NULL)  {  
		fprintf (stderr, "%s ", error);  
		exit(1);  
	}  
  
	printf ("%f ", (*cosine)(2.0));  
	dlclose(handle);  
	return 0;  
}  

編譯

編譯動態(tài)庫命令:

g++ -o libtest.so -rdynamic -shared -fPIC test.cpp

編譯主程序命令:

g++ -o mainTest mainTest.cpp -rdynamic -ldl

注意要加-ldl 和 -rdynamic 鏈接選項

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 開啟Selinux遇到的坑及解決

    開啟Selinux遇到的坑及解決

    這篇文章主要介紹了開啟Selinux遇到的坑及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 使用云服務(wù)器在CentOS系統(tǒng)中安裝.NET6.0

    使用云服務(wù)器在CentOS系統(tǒng)中安裝.NET6.0

    這篇文章介紹了使用云服務(wù)器在CentOS系統(tǒng)中安裝.NET6.0的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • foreman ubuntu16 快速安裝

    foreman ubuntu16 快速安裝

    foreman ubuntu16快速安裝,非常實(shí)用的方法,小編覺得很不錯,分享給大家,希望對大家有幫助
    2018-09-09
  • Nginx啟動SSL功能,并進(jìn)行功能優(yōu)化詳細(xì)介紹

    Nginx啟動SSL功能,并進(jìn)行功能優(yōu)化詳細(xì)介紹

    這篇文章主要介紹了Nginx啟動SSL功能,并進(jìn)行功能優(yōu)化詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Linux中使用nfs共享存儲的方式

    Linux中使用nfs共享存儲的方式

    NFS是一種基于TCP/IP傳輸?shù)木W(wǎng)絡(luò)文件系統(tǒng)協(xié)議,通過使用NFS協(xié)議,客戶機(jī)可以像訪問本地目錄一樣訪問遠(yuǎn)程服務(wù)器中的共享資源,本文給大家介紹Linux中使用nfs共享存儲的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • Apache為mysql以及自己的項目設(shè)置虛擬路徑

    Apache為mysql以及自己的項目設(shè)置虛擬路徑

    Apache為mysql以及自己的項目設(shè)置虛擬路徑
    2009-12-12
  • CentOS 7 搭建ntp時鐘服務(wù)器的步驟詳解

    CentOS 7 搭建ntp時鐘服務(wù)器的步驟詳解

    架設(shè)NTP服務(wù)器,是個相對比較簡單的事情, 架設(shè)NTP服務(wù)器目的就是使各個工作站的時間統(tǒng)一,下面這篇文章主要給大家介紹了CentOS 7中搭建ntp時鐘服務(wù)器的步驟,需要的朋友可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-01-01
  • 詳解CentOS如何使用NTP同步時間服務(wù)器

    詳解CentOS如何使用NTP同步時間服務(wù)器

    在Linux系統(tǒng)中,時間同步對于各種應(yīng)用是非常關(guān)鍵的,例如,系統(tǒng)日志和許多監(jiān)控應(yīng)用程序都需要在多個服務(wù)器之間保持時間同步,NTP協(xié)議是一種常見的協(xié)議,它使得您可以在系統(tǒng)之間同步時間,下面我們將詳細(xì)討論CentOS如何使用NTP同步時間服務(wù)器,需要的朋友可以參考下
    2023-11-11
  • ubuntu服務(wù)器環(huán)境下安裝python的方法

    ubuntu服務(wù)器環(huán)境下安裝python的方法

    這篇文章主要介紹了ubuntu服務(wù)器環(huán)境下安裝python的方法,簡單分析了Ubuntu環(huán)境下安裝Python的相關(guān)步驟、命令、與操作注意事項,需要的朋友可以參考下
    2018-03-03
  • CentOS7部署Flask(Apache、mod_wsgi、Python36、venv)

    CentOS7部署Flask(Apache、mod_wsgi、Python36、venv)

    這篇文章主要介紹了CentOS7部署Flask(Apache、mod_wsgi、Python36、venv),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01

最新評論

蒙山县| 石狮市| 宁晋县| 武隆县| 襄城县| 酒泉市| 进贤县| 安龙县| 德惠市| 监利县| 会东县| 思茅市| 宿迁市| 东莞市| 威信县| 红桥区| 庄河市| 定兴县| 宁武县| 固阳县| 延庆县| 金川县| 凤庆县| 双桥区| 盐亭县| 商河县| 资溪县| 恩施市| 交城县| 察哈| 林西县| 平乡县| 古浪县| 永寿县| 金阳县| 韶关市| 肇源县| 深水埗区| 武强县| 沈阳市| 大埔县|