Linux 動態裝載庫(dlopen)

2021-08-07 06:03:34 字數 969 閱讀 2507

linux有時我們需要在執行時指定庫的路徑去載入庫,而不是依賴於系統自動動態鏈結。比如說我們在需要做到動態載入庫外掛程式時就會用到動態裝載庫的特性(比如像lighthttpd和nginx的動態mod功能),linux提供了函式來幫助我們做到這件事,主要的幾個函式為:dlopen,dlsym,dlclose

假設我們乙個專案可能會需要載入不同版本的庫v1和v2,我們希望在配置檔案中實現可配置載入哪個庫,於是我們寫出了hello world v1和v2版本,並動態呼叫:

hello world v1

#include 

void hello()

hello world v2

#include 

void hello()

dlopen.c

#include 

#include

typedef

void(*hello_world)();

int main(int argc, char** argv) else

dlclose(handle);

} else

return

0;}

編譯:

gcc -shared

-o hello_v1.so hello_v1.c

gcc -shared

-o hello_v2.so hello_v2.c

gcc -o dlopen dlopen.c -ldl

測試:

$

./dlopen

hello_v1.so

hello

world!--

v1$./dlopen

hello_v2.so

hello

world!--

v2

動態庫的裝載

檢視動態連線庫的相關命令 動態庫的常見問題 elf可執行檔案中動態段dt rpath指定 gcc加入鏈結引數 wl,rpath 指定動態庫搜尋路徑 環境變數ld library path指定路徑 多用於臨時指定 library path和ld library path是linux下的兩個環境變數,二...

linux下編譯 鏈結 裝載 動態庫和靜態庫的學習

linux下編譯 鏈結和裝載.自己在linux上編譯 鏈結 動態庫和靜態庫的學習筆記 編譯生成可執行檔案 我們在單獨編譯的時候,只需要檢查標頭檔案,因為都放到了乙個目錄,所以單獨編譯的時候,不需要依賴其他檔案,就可以生成目標檔案 o 如下 g c showcoor.cpp g c showpoint...

動態分割槽裝載資料

乙個個分割槽匯入,分割槽需要做到一對一。hive zmgdb insert overwrite table p t3 partition city ningbo select name,post,address from p t1 where city ningbo 會啟動mapreduce進行匯入...