linux 動態度的顯式呼叫

2021-06-06 04:08:07 字數 1368 閱讀 8674

學習linux,你可能會遇到動態庫的顯式呼叫,這裡將介紹動態庫的顯式呼叫的解決方法,在這裡拿出來和大家介紹下。

顯式呼叫的含義是**出現庫檔名,使用者需要自己去開啟和管理庫檔案。其要點為:

⑴把dlfcn.h系統標頭檔案包含進來

⑵用dlopen函式開啟庫檔案,並指定開啟方式

dllope的的第乙個引數為共享庫的名稱,將會在下面位置查詢指定的共享庫。

①環境變數ld_library_path列出的用分號間隔的所有目錄。

②檔案/etc/ld.so.cache中找到的庫的列表,由ldconfig命令重新整理。

③目錄usr/lib。

④目錄/lib。

⑤當前目錄。

第二個引數為開啟共享庫的方式。有兩個取值

①rtld_now:將共享庫中的所有函式載入到記憶體

②rtld_lazy:會推後共享庫中的函式的載入操作,直到呼叫dlsym()時方載入某函式

⑶用dlerror()函式測試是否開啟成功,並進行錯誤處理;

⑷用dlsym獲得函式位址,存放在乙個函式指標中

⑸用獲得的函式指標進行函式呼叫。

⑹程式結束時用dlclose關閉開啟的動態庫,防止資源洩露。

⑺用ldconfig工具把動態庫的路徑加到系統庫列表中

1、編寫測試檔案

測試動態庫顯式呼叫的程式   

#include//用於動態庫管理的系統標頭檔案     

#include "myalib.h"//要把函式的標頭檔案包含進來,否則編譯時會報錯   

int main(int argc,char* argv)   

char* pszerr = dlerror();   

if(pszerr != null)   

//獲取函式的位址   

ptest = dlsym(pdlhandle, "test");   

pszerr = dlerror();   

if(pszerr != null)   

//實現函式呼叫   

(*ptest)();   

//程式結束時關閉動態庫   

dlclose(pdlhandle);   

return 0;     

}2、編譯測試檔案

使用-ldl選項指明生成的物件模組需要使用共享庫

gcc -o main -ldl main.c

執行完後就生成了乙個main檔案

如果編譯連線分開的話:

gcc -c main.c

gcc -o main  mian.o -ldl

3、執行測試程式

執行 ./main

輸出test

說明成功。

這就是linux動態庫的顯式呼叫的介紹。

闡述Linux動態庫的顯式呼叫

十年的發展,linux系統已經趕上了微軟,於是很多人開始學習linux時,學習linux,你可能會遇到動態庫的顯式呼叫,這裡將介紹動態庫的顯式呼叫的解決方法,在這裡拿出來和大家介紹下。顯式呼叫的含義是 出現庫檔名,使用者需要自己去開啟和管理庫檔案。其要點為 把dlfcn.h系統標頭檔案包含進來 用d...

C dll呼叫 動態(顯式)

廢話不說上 dll 標頭檔案 j test.h pragma once extern c declspec dllexport void maopao int p,int count extern c declspec dllexport int test int p,char count exte...

linux下動態鏈結庫的顯式呼叫和隱式呼叫

一 顯式呼叫和隱式呼叫的區別 動態庫相比靜態庫的區別是 靜態庫是編譯時就載入到可執行檔案中的,而動態庫是在程式執行時完成載入的,所以使用動態庫的程式的體積要比使用靜態庫程式的體積小,並且使用動態庫的程式在執行時必須依賴所使用的動態庫檔案 so檔案 而使用靜態庫的程式一旦編譯好,就不再需要依賴的靜態庫...