六月丁香五月婷婷,丁香五月婷婷网,欧美激情网站,日本护士xxxx,禁止18岁天天操夜夜操,18岁禁止1000免费,国产福利无码一区色费

學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 操作系統(tǒng) > Linux教程 >

Linux庫(kù)文件是什么有什么用

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

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

  1. 什么是庫(kù)

  在windows平臺(tái)和linux平臺(tái)下都存在著大量的庫(kù)。

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

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

  2. 庫(kù)的種類(lèi)

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

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

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

  3.庫(kù)存在的意義

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

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

  4. 庫(kù)文件在linux下是如何生成的

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

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

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

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

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

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

  在linux下,庫(kù)文件一般放在/usr/lib和/lib下,

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

  動(dòng)態(tài)庫(kù)的名字一般為libxxxx.so.major.minor,xxxx是該lib的名稱(chēng),major是主版本號(hào), minor是副版本號(hào)

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

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

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

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

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

  可以看到ln命令依賴(lài)于libc庫(kù)和ld-linux庫(kù)

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

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

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

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

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

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

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

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

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

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

 ?、賚s 意為list 列出當(dāng)前文件夾中的文件

  -l 顯示文件的屬性 可用ll來(lái)表示

  ②alias 別名 看看是否有別名的文件

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

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

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

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

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

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


Linux庫(kù)文件相關(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