Linux下靜態庫和動態庫的製作和使用
Linux作業系統支援的庫函式分為;
1.靜態庫:libxxx.a 在編譯時就將庫函式編譯進可執行程式中.
優點. 程式執行環境中不需要外部的函式庫.
缺點: 可執行程式大
2. 動態庫 .又稱共享庫,libxxxx.so 在執行時候將庫載入到可執行程式中.
優點: 可執行程式小.
缺點: 程式的執行環境中必須提供相應的庫
函式庫目錄: /lib /usr/lib
靜態庫的製作過程:
1. 生成目標檔案: gcc -c -o file.o file.c
將.c檔案編譯成.o檔案.
2. 靜態庫建立命令 ar
ar -cr -o libfile.a file.o
-c : create的意思.
-r : replace的意思.表示當插入的模組file.o已經存在libfile.a中,則覆蓋,反之ar顯示一個錯誤資訊.
使用過程: gcc main.c -L .(.表示在當前目錄下) -lsub
動態庫的製作過程:
1. 生成目標檔案: gcc -c -o file.o file.c
2. gcc -shared -fpic -o libfile.so file.o
-fpic:產生位置 無關程式碼.
- shared: 生成共享庫.
用上述命令生成libaddsub.so動態函式庫.
gcc -o main -L. -lfile
此時還不能立即./out,因為在動態函式庫使用時,會查詢/usr/lib /lib目錄下的動態函式庫,而此時我們生成的庫不在裡邊.
第一種辦法:
將生成的libsub.so放到/usr/lib或/lib中去.
第二種方法 假設libfile.so在/home/file
export LD_LIBRARY_PATH=home/linux/addsub(路徑): $LD_LIBRARY_PATH