1、區別
靜態庫: 應用程式直接從靜態庫中將函式複製到二進位制映象檔案中使用。以.a為字尾 eg: libtest.a
共享庫:可執行檔案在執行時將**從共享庫檔案中讀出,間接引用。命名:lib***.so.x.x eg: libtest.so.1.0 後面1.0為版本號
2、靜態庫生成 #ar 引數 靜態庫名 目標檔案
# ar rc libhello.a hello.o
3、靜態庫的使用:將庫檔案拷貝到當前目錄再編譯(可在檔案中呼叫庫檔案函式)
#gcc -o usehello usehello.c libhello.a
4、共享庫的生成:
1)構建共享庫目標檔案
#gcc -fpic -wall -g -c libhello.c
-fpic 生成與位置無關的**
-wall 去除所有警告
2)編譯共享庫
#gcc -g -shared -w1,-soname,libhello.so.1.0 -o libhello.so.1.0 libhello.o -lc
-soname 共享庫名
-lc 引用c庫
#ln -sf libhello.so.1.0 libhello.so //建立軟連線libhello.so
5、共享庫的使用:
1)指定庫搜尋路徑,將共享庫加到該路徑 #ld_library_path=路徑
2)編譯連線 #gcc -g -o usehello usehello.o -l ./ -lhello
-lhello 連線庫檔案libhello
若將庫直接加到/usr/lib或/lib 中可不使用-l標誌去編譯連線。
Linux 靜態庫與共享庫
可以把 多個編譯好的目標檔案 打包成為乙個檔案,就是庫檔案。庫檔案有兩種 靜態庫 a 和共享庫 so 靜態庫和共享庫區別 靜態庫是 函式的歸檔,在使用時,複製函式的 區到最終的檔案中。共享庫是 函式的歸檔,在使用時,把函式在共享庫中的位址拿到最終的檔案中。靜態庫的效率稍高一點,但占用空間非常大,而且...
Linux 靜態庫與共享庫
一 靜態庫和共享庫 1 靜態庫 a 2 共享庫 so或.sa 二 生成 1 生成共享庫 編譯選項 shared 表示生成共享庫格式 fpic 產生位置無關碼 position independent code 庫名規則 lib 版本號 so 示例 gcc shared fpic test.o o l...
靜態庫與共享庫
編寫使用靜態庫 靜態庫 共享庫 是包含了目標檔案的檔案,這些目標檔案被稱為模板或成員,是可以重用的預編譯 它們以特殊的格式和乙個表或者對映儲存在一起,這個表或者對映將符號名和儲存該符號的成員名字鏈結起來。對映加速了編譯和鏈結過程,靜態庫一般以副檔名.a 代表存檔檔案,archive 命名。為了使用庫...