在目錄 /usr/local/src/so_lib_test 下面建立三個檔案: libtest.h, libtest.c, test_main.c
libtest.h 的內容為:
/* 這裡只宣告了乙個函式 */
int add(int, int);
libtest.c 的內容為:
#include "libtest.h"
int add(int a, int b)
test_main.c 的內容為:
#include #include #include int main(int argc, char **argv)
else
printf("dlopen() function load libtest.so succeeded!\n");
dlerror(); /* clear any existing error */
*(void **) (&lpadd) = dlsym(handle, "add");
if ((error = dlerror()) != null)
else
printf("get functino offset address succeeded!\n");
printf("add(3,7) function output is: %d\n", (*lpadd)(3, 7));
if (dlclose(handle))
else
printf("dlclose() function close dynamic link library succeeded!\n");
return 0;
}
執行命令 gcc libtest.c -fpic -shared -o libtest.so
在當前目錄下會生成乙個名為 libtest.so 的動態庫檔案。
執行命令 gcc -o test_main test_main.c -l. -ltest -ldl
在當前目錄下會生成乙個名為 test_main 的可執行檔案
執行命令 ./test_main
error while loading shared libraries: libtest.so: cannot open shared object file: no such file or directory
這是因為需要告訴作業系統到**才能找到 libtest.so 檔案,執行命令
export ld_library_path=$ld_library_path:/usr/local/src/so_lib_test
(除了使用這條命令之外還有其他方法,這裡就不介紹了)
再執行命令 ./test_main
可以看到以下輸出
dlopen() function load libtest.so succeeded!
get functino offset address succeeded!
add(3,7) function output is: 10
dlclose() function close dynamic link library succeeded!
對於 dlopen(), dlsym(), dlclose() 函式的用法,在網頁: 上有詳細介紹
Linux下動態鏈結庫建立問題
1 將幾個需要編譯成動態鏈結庫的原始檔比編譯 例如有 test1.c test2.c main.c,那麼使用下面命令 gcc test1.c test2.c fpic shared o libtest.so 注意裡面的兩個選項 fpic shared 2 編譯main.c gcc o main ma...
Linux下動態鏈結庫和靜態鏈結庫
第一部分 編譯過程 預處理過程,負責標頭檔案展開,巨集替換,條件編譯的選擇,刪除注釋等工作。gcc e表示進行預處理。編譯過程,負載將預處理生成的檔案,經過詞法分析,語法分析,語義分析及優化後生成彙編檔案。gcc s表示進行編譯。彙編,是將彙編 轉換為機器可執行指令的過程。通過使用gcc c或者as...
建立靜態鏈結庫 動態鏈結庫
下面的實操中的動態庫或者靜態庫名都用wujunwu 第一步 建立乙個源 建立靜態鏈結庫的源 include void func1 void int func2 int x,int y 第二步 建立乙個.件作為函式宣告 void func1 void intfunc2 int x,int y 第三步 ...