4.生成庫文件
概述
編寫函數代碼
編譯生成各目標文件
用ar文件對目標文件歸檔,生成靜態庫文件。注意歸檔文件名必須以lib打頭(可查看庫文件命名規則)。
使用要點:
在gcc的-I參數後加上靜態庫頭文件的路徑。
在gcc的-L參數後加上庫文件所在目錄
在gcc的-l參數後加上庫文件名,但是要去掉lib和.a擴展名。
比如庫文件名是libtest.a那麼參數就是-ltest
編寫最簡單的源文件
編寫如下兩個文件,注意放在同一目錄中
myalib.h //靜態庫頭文件
myalib.c //靜態庫實現文件
制作靜態庫文件
生成目標文件
gcc-c myalib.c
執行完後會生成一個myalib.o文件
用ar命令歸檔,格式為ar-rc <生成的檔案文件名><.o文件名列表>
再次提醒,歸檔文件名一定要以lib打頭,.a結尾。
ar-rc libtest.a myalib.o
執行完後會生成一個libtest.a文件
使用靜態庫文件
編寫一個測試程序main.c,內容為
編譯目標文件,注意要把靜態庫頭文件的路徑加到-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。
靜態庫的名字一般為libxxxx.a,其中xxxx是該lib的名稱
動態庫的名字一般為libxxxx.so.major.minor,xxxx是該lib的名稱,major是主版本號,minor是副版本號