void * dlopen(const char *pathname, int mode); 返回乙個void *型別的handle,否則返回null。
pathname就是所要開啟的動態庫,如果這個庫宣告鏈結了其它庫,即對其它庫有依賴關係,那麼所有相關有依賴關係的庫都會被開啟,這些開啟的庫稱之為組(group)。
mode是開啟方式,其值有多個,不同作業系統上實現的功能有所不同,在linux下,按功能可分為三類:
1、解析方式
rtld_lazy:在dlopen返回前,對於動態庫中的未定義的符號不執行解析(只對函式引用有效,對於變數引用總是立即解析)。
rtld_now: 需要在dlopen返回前,解析出所有未定義符號,如果解析不出來,在dlopen會返回null,錯誤為:: undefined symbol: ***x.......
2、作用範圍,可與解析方式通過「|」組合使用。
rtld_global:動態庫中定義的符號可被其後開啟的其它庫重定位。
rtld_local: 與rtld_global作用相反,動態庫中定義的符號不能被其後開啟的其它庫重定位。如果沒有指明是rtld_global還是rtld_local,則預設為rtld_local。
3、作用方式
這個flag不是posix-2001標準。
rtld_deepbind:在搜尋全域性符號前先搜尋庫內的符號,避免同名符號的衝突。
這個flag不是posix-2001標準。
dlopen函式詳解
linux提供了一套api來動態裝載庫。下面列出了這些api dlopen,開啟乙個庫,並為使用該庫做些準備。dlsym,在開啟的庫中查詢符號的值。dlclose,關閉庫。dlerror,返回乙個描述最後一次呼叫dlopen dlsym,或dlclose的錯誤資訊的字串。c語言使用者需要包含標頭檔案...
dlopen函式詳解
linux提供了一套api來動態裝載庫。下面列出了這些api dlopen,開啟乙個庫,並為使用該庫做些準備。dlsym,在開啟的庫中查詢符號的值。dlclose,關閉庫。dlerror,返回乙個描述最後一次呼叫dlopen dlsym,或dlclose的錯誤資訊的字串。c語言使用者需要包含標頭檔案...
dlopen高能操作
include include typedef struct test test void register test p static void printf test p 這種 成員 的賦值方式為c99標準 static test config 載入動態庫的自動初始化函式 void init v...