亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 操作系統(tǒng) > Linux教程 >

      Linux庫文件是什么有什么用

      時(shí)間: 加城1195 分享

        Linux繼承了Unix以網(wǎng)絡(luò)為核心的設(shè)計(jì)思想,是一個(gè)性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng)。其中一個(gè)重要概念就是庫文件,這篇文章主要介紹了Linux的庫文件的相關(guān)內(nèi)容,小編覺得很不錯,在這里分享給大家。希望給大家一個(gè)參考。

        1. 什么是庫

        在windows平臺和linux平臺下都存在著大量的庫。

        本質(zhì)上來說庫是一種可執(zhí)行代碼的二進(jìn)制形式,可以被操作系統(tǒng)載入內(nèi)存執(zhí)行。

        由于windows和linux的本質(zhì)不同,因此二者庫的二進(jìn)制是不兼容的。

        2. 庫的種類

        linux下的庫有兩種:靜態(tài)庫和共享庫(動態(tài)庫)。

        二者的不同點(diǎn)在于代碼被載入的時(shí)刻不同。

        靜態(tài)庫的代碼在編譯過程中已經(jīng)被載入可執(zhí)行程序,因此體積較大。共享庫的代碼是在可執(zhí)行程序運(yùn)行時(shí)才載入內(nèi)存的,在編譯過程中僅簡單的引用,因此代碼體積較小。對于靜態(tài)庫和動態(tài)庫的選擇,需要結(jié)合二者的優(yōu)缺點(diǎn)折中考慮。一般來說,比較通用的庫,應(yīng)該做成共享庫。

        3.庫存在的意義

        庫是別人寫好的現(xiàn)有的,成熟的,可以復(fù)用的代碼,你可以使用但要記得遵守許可協(xié)議。

        現(xiàn)實(shí)中每個(gè)程序都要依賴很多基礎(chǔ)的底層庫,不可能每個(gè)人的代碼都從零開始,因此庫的存在意義非同尋常。共享庫的好處是,不同的應(yīng)用程序如果調(diào)用相同的庫,那么 在內(nèi)存里只需要有一 份該共享庫的實(shí)例。

        4. 庫文件在linux下是如何生成的

        靜態(tài)庫的后綴是.a,它的產(chǎn)生分兩步

        Step 1:由源文件編譯生成一堆.o,每個(gè).o里都包含這個(gè)編譯單元的符號表;

        Step 2:ar命令將很多.o轉(zhuǎn)換成.a,成為靜態(tài)庫;

        動態(tài)庫的后綴是.so,它由gcc加特定參數(shù)編譯產(chǎn)生。

        例如: $ gcc -fPIC -c *.c $ gcc -shared -Wl,-soname, libfoo.so.1 -o libfoo.so.1.0 *.

        5. 庫文件是如何命名的,有沒有什么規(guī)范

        在linux下,庫文件一般放在/usr/lib和/lib下,

        靜態(tài)庫的名字一般為libxxxx.a,其中xxxx是該lib的名稱

        動態(tài)庫的名字一般為libxxxx.so.major.minor,xxxx是該lib的名稱,major是主版本號, minor是副版本號

        6. 如何知道一個(gè)可執(zhí)行程序依賴哪些庫

        ldd命令可以查看一個(gè)可執(zhí)行程序依賴的共享庫,

        例如# ldd /bin/lnlibc.so.6

        => /lib/libc.so.6 (0×40021000)/lib/ld-linux.so.2

        => /lib/ld- linux.so.2 (0×40000000)

        可以看到ln命令依賴于libc庫和ld-linux庫

        7. 可執(zhí)行程序在執(zhí)行的時(shí)候如何定位共享庫文件

        靜態(tài)庫:生成可執(zhí)行文件時(shí),靜態(tài)庫已經(jīng)作為自身一部分鏈接進(jìn)了可執(zhí)行文件中,故執(zhí)行時(shí)不需要再定位,也就是說再不依賴于庫文件;

        動態(tài)庫:需要知道動態(tài)庫的路徑,參考另一篇博客;

        8. 在新安裝一個(gè)庫之后如何讓系統(tǒng)能夠找到他

        如果安裝在/lib或者/usr/lib下,那么ld默認(rèn)能夠找到,無需其他操作。

        如果安裝在其他目錄,需要將其添加到/etc/ld.so.cache文件中,步驟如下:

        1. 編輯/etc/ld.so.conf文件,加入庫文件所在目錄的路徑;

        2. 運(yùn)行l(wèi)dconfig,該命令會重建/etc/ld.so.cache文件;

        3. ldconfig命令需要root權(quán)限;

        補(bǔ)充:Linux基本命令

        ①ls 意為list 列出當(dāng)前文件夾中的文件

        -l 顯示文件的屬性 可用ll來表示

       ?、赼lias 別名 看看是否有別名的文件

        ③cd dir 跳躍目錄 -P選項(xiàng) 將路徑中的鏈接文件替換成鏈接指向的文件路徑

       ?、躳wd 查看當(dāng)前工作的文件夾名 使用-P的選項(xiàng),會直接進(jìn)入到其中,相當(dāng)于cd

        相關(guān)閱讀:Linuxshell腳本不執(zhí)行問題實(shí)例分析

        shell腳本不執(zhí)行問題:某天研發(fā)某同事找我說幫他看看他寫的shell腳本,死活不執(zhí)行,報(bào)錯。我看了下,腳本很簡單,也沒有常規(guī)性的錯誤,報(bào)“:badinterpreter:Nosuchfileordirectory”錯??催@錯,我就問他是不是在windows下編寫的腳本,然后在上傳到linux服務(wù)器的……果然。原因:在DOS/windows里,文本文件的換行符為rn,而在*nix系統(tǒng)里則為n,所以DOS/Windows里編輯過的文本文件到了*nix里,每一行都多了個(gè)^M。解決:

        1)重新在linux下編寫腳本;

        2)vi:%s/r//g:%s/^M//g(^M輸入用Ctrl+v,Ctrl+m)附:sh-x腳本文件名,可以單步執(zhí)行并回顯結(jié)果,有助于排查復(fù)雜腳本問題。


      Linux庫文件相關(guān)文章:

      1.linux下mysql導(dǎo)入sql文件命令

      2.linux的scp命令

      3.linux安裝jar命令

      4.Linux系統(tǒng)中查看文件內(nèi)容的命令總結(jié)

      5.linux中ftp下載文件命令的用法

      4016883