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使用.
intload_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...