和luster學習在Linux建立庫函式(1)(轉)
和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。
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 和luster學習在Linux建立庫函式(6)(轉)Linux函式
- 和luster學習在Linux建立庫函式(4)(轉)Linux函式
- 和luster學習在Linux建立庫函式(2)(轉)Linux函式
- 分析函式學習1 level函式
- CityEngine函式庫1-幾何建立函式
- 1. PHP 函式學習 strpos ()PHP函式
- Python學習-字串函式操作1Python字串函式
- PHP 函式庫 1 - 函式庫的分類PHP函式
- c++ 的學習 建構函式1C++函式
- 在Linux中建立靜態庫和動態庫Linux
- 函式學習函式
- 【Mysql 學習】日期函式函式MySql函式
- 字串函式庫的經典使用學習字串函式
- Js函式和物件學習體會JS函式物件
- mysql日期和時間函式學習MySql函式
- spark RDD的學習,filter函式的學習,split函式的學習SparkFilter函式
- GNU/linux的C函式庫介紹(轉)Linux函式
- 利用回撥函式和CSocket建立網路程式 (轉)函式
- MySQL函式學習(一)-----字串函式MySql函式字串
- 轉 Lua標準庫: table函式, 數學函式, 字串函式/格式化/配對,函式字串
- 物聯網學習教程—函式引數和函式的值函式
- 函式學習五函式
- 函式學習六函式
- 函式學習三函式
- 函式學習四函式
- 函式學習二函式
- 函式的學習函式
- 學習Rust 函式Rust函式
- 學習dump函式函式
- ORACLE函式學習Oracle函式
- FreeRTOS學習記錄--任務建立函式詳解函式
- c語言學習--time庫函式詳解C語言函式
- linux庫函式升級權威經驗(轉)Linux函式
- Matlab學習筆記(1)——imshow函式的使用Matlab筆記函式
- python程式設計學習筆記⑦-1函式Python程式設計筆記函式
- Linux程式建立函式vfork簡介Linux函式
- 【程式碼】--庫函式學習 ftp通訊 相關函式FTP
- 建立函式函式