學習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檔案 而使用靜態庫的程式一旦編譯好,就不再需要依賴的靜態庫...