C語言從程式碼中載入動態連結庫過程解析
阿新 • • 發佈:2020-01-07
這篇文章主要介紹了C語言從程式碼中載入動態連結庫過程解析,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
函式:void *dlopen(const char *filename,int flag);
功能:開啟動態連結庫檔案
引數:filename 動態連結庫檔名
flag 開啟方式,一般為RTLD_LASY
返回值:庫指標
函式:char *dlerror(void);
功能:獲取錯誤值
返回值:錯誤值
函式:void *dlsym(void *handle,const char *symbol);
功能:獲取動態連結庫中指定函式的指標
引數:handle 庫指標
symbol 函式名稱
返回值:與引數symbol名稱對應的函式的指標
函式:int dlclose(void *handle);
功能:關閉動態連結庫檔案
引數:庫指標
返回值:
原始碼
/*main.c*/ #include <dlfcn.h>// 相關函式標頭檔案 #include <stdio.h> int main(void) { const char *src = "Hello Dymatic"; int (*pStrLen)(const char *);// 函式指標 void *pHandle = NULL;// 庫指標 char *pErr = NULL;// 錯誤指標 // 開啟動態連結庫並檢查是否有錯誤發生 pHandle = dlopen("./libstr.so“,RTLD_LASY); pErr = dlerror(); if(!pHandle || pErr != NULL){printf("Failed load library!\n%s\n",pErr);return -1;} // 獲取StrLen函式地址並檢查是否有錯誤發生 pStrLen = dlsym(pHandle,"StrLen"); pErr = dlerror(); if(!pStrLen || pErr == NULL){printf("%s\n",pErr);return -1;} // 呼叫StrLen函式 printf("The string length is:%d\n",pStrLen(src)); // 關閉庫檔案 dlclose(pHandle); return 0; ]
執行以下命令編譯成可執行檔案。-L./ 當前目錄,-lstr為StrLen函式所在庫檔案,-ldl為dlopen等相關函式所在庫檔案
gcc -o test main.c -L./ -lstr -ldl
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。