溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux中如何使用動態庫函數

發布時間:2021-07-14 15:31:50 來源:億速云 閱讀:250 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關Linux中如何使用動態庫函數,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

Linux動態庫函數的詳解

加載動態庫

void *dlopen(const char *filename, int flag);

flag的可能值:

  •         RTLD_LAZY

  •         RTLD_NOW

  •         RTLD_GLOBAL

  •         RTLD_LOCAL

  •         RTLD_NODELETE (since glibc 2.2)

  •         RTLD_NOLOAD (since glibc 2.2)

  •         RTLD_DEEPBIND

這些flag的具體含義可使用man查看

返回動態庫中最近的一次錯誤

char *dlerror(void);

根據動態庫句柄和函數名稱,返回函數的地址

void *dlsym(void *handle, const char *symbol);

如果使用dlopen(NULL, <flag>)得到句柄,通過這個句柄可以查找所有函數符號,只要那個函數符號所在的dll在加載時指定了RTLD_GLOBAL 

關閉動態庫

int dlclose(void *handle);

根據函數地址,返回函數名稱和其它信息

注意傳入地址只要落在函數代碼空間范圍之內即可,不需要是函數的起始地址

int dladdr(void *addr, Dl_info *info);
 
typedef struct {
   const char *dli_fname;/* Filename of defining object */
   void *dli_fbase;   /* Load address of that object */
   const char *dli_sname;/* Name of nearest lower symbol */
   void *dli_saddr;   /* Exact value of nearest symbol */
  } Dl_info;

 構造函數和析構函數(這兩個是屬性,而不是函數)

__attribute__((constructor))
__attribute__((destructor))

例如:

__attribute__((constructor)) void before_main() 
{ 
    printf("before main/n"); 
} 
 
__attribute__((destructor)) void after_main() 
{ 
  printf("after main/n"); 
}

關于Linux中如何使用動態庫函數就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女