和luster學習在Linux建立庫函式(1)(轉)

subid發表於2007-08-16
和luster學習在Linux建立庫函式(1)(轉)[@more@]
Linux下建立庫函式

By luster
luster@linuxaid.com.cn

2001-8-16
1. 介紹
使用GNU的工具我們如何在Linux下建立自己的程式函式庫?一個“程式函式庫”簡單的說就是一個檔案包含了一些編譯好的程式碼和資料,這些編譯好的程式碼和資料可以在事後供其他的程式使用。程式函式庫可以使整個程式更加模組化,更容易重新編譯,而且更方便升級。程式函式庫可分為3種型別:靜態函式庫(static libraries)、共享函式庫(shared libraries)和動態載入函式庫(dynamically loaded libraries)。

靜態函式庫是在程式執行前就加入到目標程式中去了;而共享函式庫則是在程式啟動的時候載入到程式中,它可以被不同的程式共享;動態載入函式庫則可以在程式執行的任何時候動態的載入。實際上,動態函式庫並非另外一種庫函式格式,區別是動態載入函式庫是如何被程式設計師使用的。後面我們將舉例說明。

本文件主要參考Program Library HOWTO,作者是luster(hwang@ustc.edu),任何非商業目的的再次發行本文件都是允許的,但是請保留作者資訊和本版權宣告。本文件首先在釋出。

2. 靜態函式庫
靜態函式庫實際上就是簡單的一個普通的目標檔案的集合,一般來說習慣用“.a”作為檔案的字尾。可以用ar這個程式來產生靜態函式庫檔案。Ar是archiver的縮寫。靜態函式庫現在已經不在像以前用得那麼多了,主要是共享函式庫與之相比較有很多的優勢的原因。慢慢地,大家都喜歡使用共享函式庫了。不過,在一些場所靜態函式庫仍然在使用,一來是保持一些與以前某些程式的相容,二來它描述起來也比較簡單。

靜態庫函式允許程式設計師把程式link起來而不用重新編譯程式碼,節省了重新編譯程式碼的時間。不過,在今天這麼快速的計算機面前,一般的程式的重新編譯也花費不了多少時間,所以這個優勢已經不是像它以前那麼明顯了。靜態函式庫對開發者來說還是很有用的,例如你想把自己提供的函式給別人使用,但是又想對函式的原始碼進行保密,你就可以給別人提供一個靜態函式庫檔案。理論上說,使用ELF格式的靜態庫函式生成的程式碼可以比使用共享函式庫(或者動態函式庫)的程式執行速度上快一些,大概1-5%。

建立一個靜態函式庫檔案,或者往一個已經存在地靜態函式庫檔案新增新的目的碼,可以用下面的命令:
ar rcs my_library.a file1.o file2.o

這個例子中是把目的碼file1.o和file2.o加入到my_library.a這個函式庫檔案中,如果my_library.a不存在則建立一個新的檔案。在用ar命令建立靜態庫函式的時候,還有其他一些可以選擇的引數,可以參加ar的使用幫助。這裡不再贅述。

一旦你建立了一個靜態函式庫,你可以使用它了。你可以把它作為你編譯和連線過程中的一部分用來生成你的可執行程式碼。如果你用gcc來編譯產生可執行程式碼的話,你可以用“-l”引數來指定這個庫函式。你也可以用ld來做,使用它的“-l”和“-L”引數選項。具體用法,可以參考info:gcc。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10796304/viewspace-962579/,如需轉載,請註明出處,否則將追究法律責任。

相關文章