linux下靜態庫與共享庫的生成和使用

2021-06-27 05:14:45 字數 845 閱讀 5003

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 命名。為了使用庫...