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中如何建立...