linux下載入動態鏈結庫的方法

2021-06-05 23:56:15 字數 1544 閱讀 1782

linux下載入動態鏈結庫的方法:以下以觸控螢幕為例:介紹是如何載入一下共享庫的。

首先讓我們看看以下幾個函式:

dlopen()

功能:開啟乙個動態鏈結庫

包含標頭檔案:

#include

函式定義:

void * dlopen( const char * pathname, int mode );

函式描述:

在dlopen的()函式以指定模式開啟指定的動態連線庫檔案,並返回乙個控制代碼給呼叫程序。使用dlclose()來解除安裝開啟的庫。

dlsym()

函式原型: void* dlsym(void* handle,const char* symbol)

該函式在檔案中。

handle是由dlopen開啟動態鏈結庫後返回的指標,symbol就是要求獲取的函式的名稱,函式返回值是void*,指向函式的位址,供呼叫使用

getenv()

功 能: 從環境中取字串,獲取環境變數的值

標頭檔案: stdlib.h

用 法:char *getenv(char *envvar);

函式說明:getenv()用來取得引數enwar環境變數的內容。引數enwar為環境變數的名稱,如果該變數存在則會返回指向該內容的指標。環境變數的格式為enwar=value

返回值: 執行成功則返回指向該內容的指標,找不到符合的環境變數名稱則返回null

alloca()

包含在標頭檔案malloc.h中.   在某些系統中會巨集定義成_alloca使用.

int

load_module(

struct

tsdev

*ts,

const

char

*module,

const

char

*params

, int

raw)

else

/*構造共享庫路徑

*/strcat(fn, "/

");strcat(fn, module);

strcat(fn,

".so");

#ifdef debug

printf (

"loading module %s\n

", fn);

#endif

handle

=dlopen(fn, rtld_now); if

(!handle)

return-1

; init

=dlsym(handle,

"mod_init");

if(!

init)

info

=init(ts,

params);

if(!info)

info

->

handle

=handle; if

(raw)

else if

(ret)

return

ret;

}

linux 動態鏈結庫載入

linux 動態鏈結 linux 中的應用程式以以下兩種方式之一鏈結到外部函式 要麼在構建時與靜態庫 lib a 靜態地鏈結,並且將庫 包含在該應用程式的可執行檔案裡 要麼在執行時與共享庫 lib so 動態地鏈結。通過動態鏈結裝入器,將動態庫對映進應用程式的可執行記憶體中。在啟動應用程式之前,動態...

linux動態鏈結庫的載入順序

1.編譯程式時用到動態庫,該從那些地方查詢,按照怎麼樣的順序查詢?2.執行程式時需要動態庫,該從那些地方查詢,按照怎麼樣的順序查詢?1.gcc 編譯時引數 l指定的路徑 2.環境變數 library path 3.系統預設庫位置 lib usr lib 1.gcc 編譯時指定的執行時庫路徑 wl,r...

Linux下動態鏈結庫和靜態鏈結庫

第一部分 編譯過程 預處理過程,負責標頭檔案展開,巨集替換,條件編譯的選擇,刪除注釋等工作。gcc e表示進行預處理。編譯過程,負載將預處理生成的檔案,經過詞法分析,語法分析,語義分析及優化後生成彙編檔案。gcc s表示進行編譯。彙編,是將彙編 轉換為機器可執行指令的過程。通過使用gcc c或者as...