linux
圖2. 靜態鏈結與動態鏈結return (a+b);
}編譯動態庫:gcc -shared -o libadd.so add.c 生成 libadd.so
動態鏈結方法:在編譯程式時,指定要鏈結的庫檔案即可,此時呼叫共享庫只需要其標頭檔案即可。
示例:test.c
#include
#include
int add(int,int);
int main(int argc, char *argv)
編譯程式:gcc -ladd -o test test.c
-l 引數表示要鏈結的動態鏈結庫,若路徑不在標準庫檔案路徑下可用-l 包含。
動態載入方法:通過下列api完成
表1. dl api
函式
描述
dlopen
使物件檔案可被程式訪問
dlsym
獲取執行了 dlopen 函式的物件檔案中的符號的位址
dlerror
返回上一次出現錯誤的字串錯誤
dlclose
關閉目標檔案
示例:
test.c
#include
#include
int main(int argc, char *argv)
func=dlsym(dl_handler,"add");
error =dlerror();
if(error!=null)
sum=(*func)(10,11);
printf("sum=%d",sum);
dlclose(dl_handler);
}編譯程式:gcc -otest test.c -ldl
-ldl 表明將 dllib 鏈結於該程式,即可呼叫dl的api
共享庫的路徑:可以放在系統共享庫目錄:/usr/lib下,也可以通過環境變數ld_library_path設定
Linux下動態庫 靜態庫的生成與使用
動態庫和靜態庫的介紹 一般情況下,在專案裡會把功能相似的 封裝成庫,方便使用和管理,同時增加了 的內聚性。庫分為兩種,一種為靜態庫,檔名以.a結尾,另一種是動態庫,檔名以.so結尾。靜態庫和動態庫的使用各有利弊。使用靜態庫的好處就是簡單,因為在鏈結的時候直接把靜態庫中的內容鏈結到可執行檔案中,鏈結完...
Linux動態庫的生成與使用指南
linux下動態庫檔案的檔名形如lib so,其中so是 shared object 的縮寫,即可以共享的目標檔案。在鏈結動態庫生成可執行檔案時,並不會把動態庫的 複製到執行檔案中,而是在執行檔案中記錄對動態庫的引用。程式執行時,再去載入動態庫檔案。如果動態庫已經載入,則不必重複載入,從而能節省記憶...
Linux動態庫生成與使用指南
linux下動態庫檔案的檔名形如lib so,其中so是 shared object 的縮寫,即可以共享的目標檔案。在鏈結動態庫生成可執行檔案時,並不會把動態庫的 複製到執行檔案中,而是在執行檔案中記錄對動態庫的引用。程式執行時,再去載入動態庫檔案。如果動態庫已經載入,則不必重複載入,從而能節省記憶...