gcc -ldl 選項作用


如果你的程序中使用dlopen、dlsym、dlclose、dlerror 顯示加載動態庫,需要設置鏈接選項 -ldl

 

加載動態鏈接庫,首先為共享庫分配物理內存,然后在進程對應的頁表項中建立虛擬頁和物理頁面之間的映射。

你可以認為系統中存在一種引用計數機制, 每當一個進程加載了共享庫(在該進程的頁表中進行一次映射),引用計數加一;

一個進程顯式卸載(通過dlclose等)共享庫或進程退出時,引用計數減 一,

當減少到0時,系統卸載共享庫。

(1)打開動態鏈接庫:dlopen,函數原型void *dlopen (const char *filename, int flag); dlopen用於打開指定名字(filename)的動態鏈接庫,並返回操作句柄。

(2)取函數執行地址:dlsym,函數原型為: void *dlsym(void *handle, char *symbol); dlsym根據動態鏈接庫操作句柄(handle)與符號(symbol),返回符號對應的函數的執行代碼地址。

(3)關閉動態鏈接庫:dlclose,函數原型為: int dlclose (void *handle); dlclose用於關閉指定句柄的動態鏈接庫,只有當此動態鏈接庫的使用計數為0時,才會真正被系統卸載。

(4)動態庫錯誤函數:dlerror,函數原型為: const char *dlerror(void); 當動態鏈接庫操作函數執行失敗時,dlerror可以返回出錯信息,返回值為NULL時表示操作函數執行成功。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM