複製鏈接
請複製以下鏈接發送給好友

dlsym

鎖定
dlsym是一個計算機函數,功能是根據動態鏈接庫操作句柄與符號,返回符號對應的地址,不但可以獲取函數地址,也可以獲取變量地址。
中文名
dlsym
包含頭文件
#include<dlfcn.h>
功    能
返回符號對應的地址。
函數定義
void*dlsym

dlsym基本定義

dlsym包含頭文件

#include<dlfcn.h>

dlsym函數定義

void*dlsym(void*handle,constchar*symbol)

dlsym函數描述

dlsym(dynamic library symbol)
根據 動態鏈接庫 操作句柄(handle)與符號(symbol),返回符號對應的地址。使用這個函數不但可以獲取函數地址,也可以獲取變量地址。
handle:由dlopen打開動態鏈接庫後返回的指針;
symbol:要求獲取的函數或全局變量的名稱。

dlsym返回值

void* 指向函數的地址,供調用使用。

dlsym使用dlsym

假設在my.so中定義了一個void mytest()函數,那在使用my.so時先聲明一個函數指針:
void(*pMytest)();
接下來先將那個my.so載入:
pHandle=dlopen("my.so",RTLD_LAZY);//詳見dlopen函數
然後使用dlsym函數將函數指針 pMytest 指向 mytest() 函數:
pMytest=(void(*)())dlsym(pHandle,"mytest");//可見放在雙引號中的mytest不用加括號,即使有參數也不用
(可調用dlerror();返回錯誤信息,正確返回為空)
最後通過調用函數指針執行mytest函數:
intmain(){
//......
pMytest();
//......
return0;
}