靜態庫和共享庫(二)

2021-05-22 12:29:17 字數 736 閱讀 3561

brary值;

(2) 動態鏈結緩衝檔案/etc/ld.so.cache

(3) 目錄/lib, /usr/lib

flag表示在什麼時候解決未定義的符號(呼叫).取值有兩個:

1) rtld_lazy : 表明在動態鏈結庫的函式**執行時解決.

2) rtld_now : 表明在dlopen返回前就解決所有未定義的符號, 一旦未解決, dlopen將返回錯誤.

dlopen呼叫失敗時, 將返回null值, 否則返回的是操作控制代碼.

3. dlsym : 取函式執行位址

原型為: void *dlsym(void *handle, char *symbol);

dlsym根據動態鏈結庫操作控制代碼(handle)與符號(symbol), 返回符號對應的函式的執行**位址.由此位址, 可以帶引數執行相應的函式.

如程式**: void (*add)(int x,int y); /* 說明一下要呼叫的動態函式add */

add=dlsym("***.so","add"); /* 開啟***.so共享庫,取add函式位址 */

add(89,369); /* 帶兩個引數89和369呼叫add函式 */

4. dlclose : 關閉動態鏈結庫

原型為: int dlclose (void *handle);

dlclose用於關閉指定控制代碼的動態鏈結庫, 只有當此動態鏈結庫的使用計數為0時,才會真正被系統解除安裝.

靜態庫和共享庫

建立和使用靜態庫 1 建立目錄 mkdir p test sub 2 在子目錄sub 下編寫hello.c和hello.h hello.c include include hello.h void hello hello.h include void hello 4 在主目錄test 下編寫main...

靜態庫和共享庫概念

1.靜態庫和共享庫的概念 在鏈結共享庫時只是指定了動態鏈結器和該程式所需要的庫檔案,並沒有真正的做鏈結,可執行檔案中仍然是未定義的符號,需要在執行時做動態鏈結。而在鏈結靜態庫時,鏈結器會把靜態庫中的目標檔案取出來和可執行檔案真正的鏈結在一起,所以採用靜態庫的可執行檔案一般很大,不需要庫檔案也能執行,...

靜態庫和共享庫的區別

根據鏈結時期不同,庫分為靜態庫和動態庫。靜態庫是在程式編譯時鏈結的,動態庫是在程式執行時鏈結的。庫是預先編譯好的方法的集合 linux上庫的命名一般為lib a 靜態庫 lib so 動態庫 庫檔案常存放的地點為 lib或 usr lib,庫對應的標頭檔案一般存放在 usr include中 下面介...