關於在Linux平台上接靜態庫和共享庫的使方法
1、Linux函數庫介紹
函數庫可以看做是事先編寫的函數集合,它可以與主函數分離,從而增加程序開發的複用性。Linux中函數庫可以有3種使用的形式:靜態、共享和動態。
1)靜態庫的代碼在編譯時就已連接到開發人員開發的應用程序中;
2)而共享庫只是在程序開始運行時才載入;
3)動態庫也是在程序運行時載入,但與共享庫不同的是,動態庫使用的庫函數不是在程序運行使開始載入,而是在程序中的語句需要使用該函數時才載入。動態庫可以在程序運行期間釋放動態庫所佔用的內存,騰出空間供其他程序使用。
注:
l由於共享庫和動態庫並沒有在程序中包括庫函數的內容,只是包含了對庫函數的引用,因此代碼的規模比較小。
l系統中可用的庫大都存放在/usr/local/lib、/usr/lib、/lib、目錄中。
l頭文件大都放在/usr/include、/usr/local/include目錄下。
l共享庫的相關配置文件和管理命令如下:
/etc/:包含共享庫的搜索位置。
ldconfig:共享庫管理工具,一般在更新了共享庫之後要運行該命令。
ldd:可以查看可執行文件所使用的共享庫。
l庫文件名由前綴lib和庫名以及後綴組成,根據庫的類型不同,後綴名也不一樣。
2、大量使用庫文件的主要原因
1)為了便於編程,對於部分經常使用的函數,相應的開發語言都提供了對應的庫文件支持。
2)隱藏具體的函數實現細節。程序員在使用庫文件時,只需要包含所需要函數所在的頭文件,而不必關心該函數的具體實現。對於商業軟件來説,其知識產權也得到了一定的保護。
3、使用這些庫函數都有什麼途徑
在任何編程環境中,庫文件都是一些預先編譯好的函數集合,這些函數以二進制代碼形式存儲在庫文件中。用户要使用這些函數,只需要包含這些庫文件即可。一般來説,要從庫文件獲得相應的函數有兩種辦法。
1)在編譯時將庫中相應函數的二進制映像代碼直接拷貝到當前編譯的`程序中,當前程序是獨立運行的。這種庫我們叫做靜態庫,在Linux中,以.a為後綴的為靜態庫。
2)在編譯時只引用庫中相應函數的二進制映像代碼的入口地址(不直接拷貝),該程序在運行時從共享庫文件中讀出該函數代碼(這需要首先將共享庫加載到內存中),從而間接引用,這種庫我們稱之為共享庫,在Linux中,以.x.x為格式命名。
4、具體如何使用
使用靜態庫、共享庫和動態庫三種類型的方法很相似,都是使用選項是“-l”(注意這裏是小寫的“L”)。該選項是用於指明具體使用的庫文件。由於在Linux中函數庫的命名規則都是以“lib”開頭的,因此,這裏的庫文件只需填寫lib之後的內容即可。如:有靜態庫文件libm.a,在調用時只需寫作“-lm”;同樣對於動態庫文件;在調用時也只需寫作“-lm”即可,其整體調用命令類似如下:
[root@localhost gcc]# gcc -o dynamic –L /root/lq/testc/lib/ dynamic.o -lmydynamic
那麼,若系統中同時存在文件名相同的靜態庫文件和動態庫文件時,該鏈接選項究竟會調用靜態庫文件還是動態庫文件呢?經測試後可以發現,系統調用的是動態庫文件,這是由於Linux系統中默認的是採用動態鏈接的方式。這樣,若用户要調用含有同名動態庫文件的靜態庫文件,則在“-l”後需要顯示地寫出包含後綴名的文件名,如:要調用libm.a庫文件時就需寫作“-llibm.a”。
1)如果你已經有一個靜態庫文件libhello.a,此庫文件的頭文件為libhello.h,其內容如下:
#ifndef __libhello_H__
#define __libhello_H__
void print_hello(void); //print hello world,this is library to console
#endif __libhello_H__
我們可以從上面的代碼看出,頭文件知道libhello.a庫文件包含了print_hello()函數,其返回值類型和參數都為空。因此,在編寫程序時,你只需要使用此函數(在包含頭文件的前提下),而不用去管其具體實現細節。
-
win7關閉休眠功能的設置方法
win7關閉休眠功能怎麼設置呢?關閉休眠在你下載或者想電腦一直工作下去,是非常有必要的,不然電腦進入休眠就會停止工作,任務無法完成,今天小編給大家説説win7關閉休眠功能方法。win7關閉休眠功能的設置方法1、桌面空白處右鍵選擇“個性化”;2、選擇“屏幕保護程序”...
-
Win7系統打開服務管理界面的幾種方法
Win7系統打開服務管理界面的幾種方法導語:Win7系統在服務窗口可以關閉/開啟服務程序,但需要在服務窗口界面才能操作,那麼Win7系統怎麼打開服務管理界面呢?今天小編與大家分享下Win7系統打開服務管理界面的具體操作步驟,歡迎參考!Win7系統打開服務管理界面方法一1、...
-
電腦有哪些操作系統?
提起操作系統,相信大家首選聯想的是電腦操作系統,下面小編就為大家介紹一下電腦有哪些操作系統吧!WINDOWS操作系統Windows操作系統是一款由美國微軟公司開發的窗口化操作系統。採用了GUI圖形化操作模式,比起從前的指令操作系統如DOS更為人性化。Windows操作系統是...
-
Windows10的週年更新中無法關閉Cortana
導讀:備受期待的Windows10的週年更新中將會帶來諸多新特性,包括更實用的開始菜單、WindowsInk、強化的WindowsDefender,甚至還有一個無法關閉的語音助手Cortana。就跟隨本站小編一起去了解下吧,想了解更多相關信息請持續關注我們應屆畢業生考試網!目前在Windows10...