libtest.h 的內容爲:
- /* 這裏只聲明瞭一個函數 */
- int Add(int, int);
- #include "libtest.h"
- int Add(int a, int b)
- {
- return ((a)+(b));
- }
- #include <stdio.h>
- #include <stdlib.h>
- #include <dlfcn.h>
- int main(int argc, char **argv)
- {
- void *handle;
- int (*lpAdd)(int, int);
- char *error;
- if ( !(handle = dlopen("libtest.so", RTLD_LAZY)) )
- {
- fprintf(stderr, "%s\n", dlerror());
- return 1;
- }
- else
- printf("dlopen() function load libtest.so succeeded!\n");
- dlerror(); /* Clear any existing error */
- *(void **) (&lpAdd) = dlsym(handle, "Add");
- if ((error = dlerror()) != NULL)
- {
- fprintf(stderr, "%s\n", error);
- return 1;
- }
- else
- printf("Get functino offset address succeeded!\n");
- printf("Add(3,7) function output is: %d\n", (*lpAdd)(3, 7));
- if (dlclose(handle))
- {
- error = dlerror();
- fprintf(stderr, "%s\n", error);
- return 1;
- }
- 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() 函數的用法,在網頁: http://linux.die.net/man/3/dlopen 上有詳細介紹