linux 下建立靜態庫和動態庫

2021-06-05 00:23:58 字數 1840 閱讀 9841

4.生成庫檔案

編寫函式**

編譯生成各目標檔案

用ar檔案對目標檔案歸檔,生成靜態庫檔案。注意歸檔檔案名必須以lib打頭(可檢視庫檔案命名規則)。

使用要點:

在gcc的-i引數後加上靜態庫標頭檔案的路徑。

在gcc的-l引數後加上庫檔案所在目錄

在gcc的-l引數後加上庫檔名,但是要去掉lib和.a副檔名。

比如庫檔名是libtest.a那麼引數就是-ltest

編寫如下兩個檔案,注意放在同一目錄中

myalib.h //靜態庫標頭檔案

myalib.c //靜態庫實現檔案

voidtest();

#inlcudevoidtest()

生成目標檔案

gcc-c myalib.c

執行完後會生成乙個myalib.o檔案

用ar命令歸檔,格式為ar-rc 《生成的檔案檔名》<.o檔名列表》

再次提醒,歸檔檔案名一定要以lib打頭,.a結尾。

ar-rc libtest.a myalib.o

執行完後會生成乙個libtest.a檔案

編寫乙個測試程式main.c,內容為

#include"myalib.h"

intmain(int argc,char* argv)

編譯目標檔案,注意要把靜態庫標頭檔案的路徑加到-i引數裡面

gcc-i ./ -o main.o -c main.c

現在生成了乙個main.o檔案

生成可執行檔案,注意要把靜態庫檔案的路徑加到-l引數裡面,

把庫檔名(去掉打頭的lib和結尾的.a)加到-l引數後面。如下面所示

gcc-o main -l ./ main.o -ltest

此時就會生成乙個名為main的可執行檔案

另外,注意-l引數好象應該加到輸入檔名的後面,否則會報錯。

比如gcc-o main -l./ -ltest main.o就會提示

main.o(.text+0x11):in function `main':

:undefined reference to `test'

collect2:ld returned 1 exit status

執行可執行檔案檢視效果

執行./main,輸出

test

說明執行成功。

gcc-fpic --shared test.c -o libtest.so

生成libtest.so

編譯可執行檔案

gccmain.c -o main -i./ -l./ -ltest

指定載入庫的路徑,後面會詳細介紹。

exportld_library_path=./:$ld_library_path

執行./main,輸出

test

說明執行成功。

5.庫檔案命名

gnu庫的使用必須遵守librarygnu publiclicense(lgpl許可協議)。該協議與gnu許可協議略有不同,開發人員可以免費使用gnu庫進行軟體開發,但必須保證向使用者提供所用的庫函式的源**。

系統中可用的庫都存放在/usr/lib和/lib目錄中。庫檔名由字首lib和庫名以及字尾組成。根據庫的型別不同,字尾名也不一樣。共享庫的字尾名由.so和版本號組成,靜態庫的字尾名為.a。

靜態庫的名字一般為lib***x.a,其中***x是該lib的名稱

動態庫的名字一般為lib***x.so.major.minor,***x是該lib的名稱,major是主版本號,minor是副版本號

linux建立靜態庫和動態庫

2015新年第一篇部落格,哈哈,這個2月還沒寫過部落格呢,從現在開始繼續!一 建立靜態庫 在本例中將建立乙個小型靜態函式庫libfoo,包含兩個函式bill fred 1 編輯兩個檔案bill.c和fred.c bill.c include void bill fred.c include void...

linux下建立靜態庫與動態庫

靜態庫 編寫好c原始檔,裡面只有函式的實現。要呼叫的檔案比如是main.c,在檔案裡宣告c原始檔裡的庫函式名。1 首先 gcc c hello.c 生成hello.o 2 ar crs libhello.a hello.o 3 gcc o main main.c l.lhello l後面跟著庫的路徑...

linux 下靜態庫和動態庫

我們通常把一些公用函式製作成函式庫,供其它程式使用。函式庫分為靜態庫和動態庫兩種。靜態庫在程式編譯時會被連線到目標 中,程式執行時將不再需要該 靜態庫。動態庫在程式編譯時並不會被連線到目標 中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。本文主要通過舉例來說明在 linux中如何建立...