1. 程式人生 > 程式設計 >C語言從程式碼中載入動態連結庫過程解析

C語言從程式碼中載入動態連結庫過程解析

這篇文章主要介紹了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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。