欧美日韩不卡一区二区三区,www.蜜臀.com,高清国产一区二区三区四区五区,欧美日韩三级视频,欧美性综合,精品国产91久久久久久,99a精品视频在线观看

操作系統(tǒng)

在Linux平臺(tái)上接靜態(tài)庫和共享庫的使方法

時(shí)間:2025-03-06 00:19:05 操作系統(tǒng) 我要投稿
  • 相關(guān)推薦

關(guān)于在Linux平臺(tái)上接靜態(tài)庫和共享庫的使方法

  1、Linux函數(shù)庫介紹

  函數(shù)庫可以看做是事先編寫的函數(shù)集合,它可以與主函數(shù)分離,從而增加程序開發(fā)的復(fù)用性。Linux中函數(shù)庫可以有3種使用的形式:靜態(tài)、共享和動(dòng)態(tài)。

  1)靜態(tài)庫的代碼在編譯時(shí)就已連接到開發(fā)人員開發(fā)的應(yīng)用程序中;

  2)而共享庫只是在程序開始運(yùn)行時(shí)才載入;

  3)動(dòng)態(tài)庫也是在程序運(yùn)行時(shí)載入,但與共享庫不同的是,動(dòng)態(tài)庫使用的庫函數(shù)不是在程序運(yùn)行使開始載入,而是在程序中的語句需要使用該函數(shù)時(shí)才載入。動(dòng)態(tài)庫可以在程序運(yùn)行期間釋放動(dòng)態(tài)庫所占用的內(nèi)存,騰出空間供其他程序使用。

  注:

  l由于共享庫和動(dòng)態(tài)庫并沒有在程序中包括庫函數(shù)的內(nèi)容,只是包含了對(duì)庫函數(shù)的引用,因此代碼的規(guī)模比較小。

  l系統(tǒng)中可用的庫大都存放在/usr/local/lib、/usr/lib、/lib、目錄中。

  l頭文件大都放在/usr/include、/usr/local/include目錄下。

  l共享庫的相關(guān)配置文件和管理命令如下:

  /etc/ld.so.conf:包含共享庫的搜索位置。

  ldconfig:共享庫管理工具,一般在更新了共享庫之后要運(yùn)行該命令。

  ldd:可以查看可執(zhí)行文件所使用的共享庫。

  l庫文件名由前綴lib和庫名以及后綴組成,根據(jù)庫的類型不同,后綴名也不一樣。

  2、大量使用庫文件的主要原因

  1)為了便于編程,對(duì)于部分經(jīng)常使用的函數(shù),相應(yīng)的開發(fā)語言都提供了對(duì)應(yīng)的庫文件支持。

  2)隱藏具體的函數(shù)實(shí)現(xiàn)細(xì)節(jié)。程序員在使用庫文件時(shí),只需要包含所需要函數(shù)所在的頭文件,而不必關(guān)心該函數(shù)的具體實(shí)現(xiàn)。對(duì)于商業(yè)軟件來說,其知識(shí)產(chǎn)權(quán)也得到了一定的保護(hù)。

  3、使用這些庫函數(shù)都有什么途徑

  在任何編程環(huán)境中,庫文件都是一些預(yù)先編譯好的函數(shù)集合,這些函數(shù)以二進(jìn)制代碼形式存儲(chǔ)在庫文件中。用戶要使用這些函數(shù),只需要包含這些庫文件即可。一般來說,要從庫文件獲得相應(yīng)的函數(shù)有兩種辦法。

  1)在編譯時(shí)將庫中相應(yīng)函數(shù)的二進(jìn)制映像代碼直接拷貝到當(dāng)前編譯的程序中,當(dāng)前程序是獨(dú)立運(yùn)行的。這種庫我們叫做靜態(tài)庫,在Linux中,以.a為后綴的為靜態(tài)庫。

  2)在編譯時(shí)只引用庫中相應(yīng)函數(shù)的二進(jìn)制映像代碼的入口地址(不直接拷貝),該程序在運(yùn)行時(shí)從共享庫文件中讀出該函數(shù)代碼(這需要首先將共享庫加載到內(nèi)存中),從而間接引用,這種庫我們稱之為共享庫,在Linux中,以libxxx.xo.x.x為格式命名。

  4、具體如何使用

  使用靜態(tài)庫、共享庫和動(dòng)態(tài)庫三種類型的方法很相似,都是使用選項(xiàng)是“-l”(注意這里是小寫的“L”)。該選項(xiàng)是用于指明具體使用的庫文件。由于在Linux中函數(shù)庫的命名規(guī)則都是以“l(fā)ib”開頭的,因此,這里的庫文件只需填寫lib之后的內(nèi)容即可。如:有靜態(tài)庫文件libm.a,在調(diào)用時(shí)只需寫作“-lm”;同樣對(duì)于動(dòng)態(tài)庫文件libm.so;在調(diào)用時(shí)也只需寫作“-lm”即可,其整體調(diào)用命令類似如下:

  [root@localhost gcc]# gcc -o dynamic –L /root/lq/testc/lib/ dynamic.o -lmydynamic

  那么,若系統(tǒng)中同時(shí)存在文件名相同的靜態(tài)庫文件和動(dòng)態(tài)庫文件時(shí),該鏈接選項(xiàng)究竟會(huì)調(diào)用靜態(tài)庫文件還是動(dòng)態(tài)庫文件呢?經(jīng)測(cè)試后可以發(fā)現(xiàn),系統(tǒng)調(diào)用的是動(dòng)態(tài)庫文件,這是由于Linux系統(tǒng)中默認(rèn)的是采用動(dòng)態(tài)鏈接的方式。這樣,若用戶要調(diào)用含有同名動(dòng)態(tài)庫文件的靜態(tài)庫文件,則在“-l”后需要顯示地寫出包含后綴名的文件名,如:要調(diào)用libm.a庫文件時(shí)就需寫作“-llibm.a”。

  1)如果你已經(jīng)有一個(gè)靜態(tài)庫文件libhello.a,此庫文件的頭文件為libhello.h,其內(nèi)容如下:

  #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()函數(shù),其返回值類型和參數(shù)都為空。因此,在編寫程序時(shí),你只需要使用此函數(shù)(在包含頭文件的前提下),而不用去管其具體實(shí)現(xiàn)細(xì)節(jié)。

【在Linux平臺(tái)上接靜態(tài)庫和共享庫的使方法】相關(guān)文章:

怎樣創(chuàng)建Linux靜態(tài)庫和動(dòng)態(tài)庫10-24

C語言靜態(tài)庫與動(dòng)態(tài)庫的區(qū)別08-04

Linux自動(dòng)備份MySQL數(shù)據(jù)庫的實(shí)用方法10-08

Linux系統(tǒng)下動(dòng)態(tài)庫的生成介紹09-20

科目二倒庫和移庫的要點(diǎn)08-05

Linux平臺(tái)Oracle無法啟動(dòng)的處理方法08-14

駕照考試:倒桿移庫的方法和技巧08-20

科目二倒庫的技巧方法08-14

PHP數(shù)據(jù)庫連接的方法09-22