摘要:和luster學習在Linux創建庫函數 Linux下創建庫函數 By luster [email protected] 2001-8-16 1. 介紹 使用GNU的工具我們如何在Linux下創建自己的程序函數庫?一個“程序函數庫”簡單的說就是一個文件包含了一些編譯好的代碼和數據,這些編譯好的代碼和數據可以在事後供其他的程序使用。程序函數庫可以使整個程序更加模塊化,更容易重新編譯,而且更方便升級。程序函數庫可分為3種類型:靜態函數庫(static libraries)、共享函數庫(shared libraries)和動態加載函數庫(dynamically loaded libraries)。 靜態函數庫是在程序執行前就加入到目標程序中去了;而共享函數庫則是在程序啟動的時候加載到程序中,它可以被不同的程序共享;動態加載函數庫則可以在程序運行的任何時候動態的加載。實際上,動態函數庫並非另外一種庫函數格式,區別是動態加載函數庫是如何被程序員使用的。後面我們將舉例說明。 本文檔主要參考Program Library HOWTO,作者是luster([email protected]),任何非商業目的的再次發行本文檔都是允許的,但是請保留作者信息和本版權聲明。本文檔首先在www.linuxaid.com.cn發布。 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。