linux中lib開頭檔案作用

2021-06-07 12:46:16 字數 1646 閱讀 7194

lib檔案

一般來說,庫檔案有兩種:動態庫和靜態庫。

1.動態庫

動態庫(也叫共用庫)是編譯好的**片段,在程式執行時由執行時連線檔案(runtime linker)/lib/ld.so載入。這有點類似於windows下的dll檔案。在提高效率方面,這樣做可以節省系統在以下方面的開銷:

硬體裝置:不同的程式可以共享相同的**。

記憶體:核心可以將庫檔案的拷貝存放在記憶體裡以便程序之間共享。

習慣上,動態庫以字串so命名,後面加上版本號。例如:

libc.so.6 c語言的庫檔案.千萬別給刪掉了:)

libcrypt.so.1 影子口令系統的編碼庫.

libncurses.so.4.2 the new curses library routines.

2.靜態庫

靜態庫在編譯的時候被固定在了可執行檔案中,而不是放在系統的某個地方由ld.so載入。這種做法好的一面是可執行檔案自己包含了所需的所有庫檔案,並不依賴於系統中的其他**,也不會出現庫檔案缺失的情況。你可以把這些**複製給任何人,而它們保證可以工作。不好的一面就是可執行檔案不必要的增大了,而且不同的程式之間不能共享**。

習慣上,我們以後綴.a來標記靜態庫檔案。例如:

libgtk.a gimp和其他x應用的圖形庫.

libcrypt.a 影子口令系統的編碼庫.

libvga.a. [s]vga圖形庫.

3.靜態庫與動態庫的對比

使用靜態庫的程式要比使用動態庫的程式稍微快一些。我曾見過有人說兩者之間啟動時間的相差5%的數量級。但是,別忘了,動態庫的好處之一是建立在一種假定條件下,即這些可執行**已經被載入到了記憶體中.事實上,對於像libc這樣的庫檔案,確實是一直儲存在記憶體中的。如果你要執行乙個使用靜態庫編譯的 netscape,必然要多等上一點時間。因此,對於「哪種庫檔案更快」這個問題的答案應該是「看情況而定」。但是一般來說,用動態庫編譯的的程式要更快一些,因為大部分情況下你所需要的庫都已經載入到記憶體中了。

4.重要的檔案/可執行檔案

這個程式/lib/ls.so負責為可執行檔案連線動態庫。它在下面的資料夾裡搜尋庫檔案:

環境變數ld_library_path中列出的目錄,除非該程式設定了sid或者uid,以跳過環境變數。

檔案/etc/ld.so.cache中列出的目錄。

in /usr/lib

in /lib

至於為什麼ld.so不去搜尋/usr/local/lib,自有它的理由,我可以告訴你,但那會折磨死你。有些東西根本就不是要凡人知道的...

在/etc/ld.so.cache這個檔案中包含了乙個需要搜尋的目錄的彙總列表和乙個備用庫檔案的列表。這個檔案(/etc/ld.so.cache)是由/sbin/ldconfig建立的。

/sbin/ldconfig在系統啟動時自動執行,也可在編譯完成庫檔案後手動執行(每次安裝軟體之後都手動執行該檔案是個不錯的習慣)。 ldconfig生成/etc/ld.so.cache檔案,它搜尋/lib、/usr/lib以及其他在/etc/ld.so.conf中列出的需要搜尋的目錄。

在配置檔案/etc/ld.so.conf中列出了所有ldconfig需要搜尋以生成ld.so.cache檔案的目錄。如果你把庫檔案放在了不是預設的資料夾裡(比如/home/lib),你應該把這個目錄手工新增到ld.so.conf裡,然後重新執行ldconfig

Linux 下個頭檔案作用

2.6.30.4的標頭檔案的位置和2.6.25.8的不一樣,除去核心原始碼下的include目錄外,在arch arm mach s3c2410 和arch arm plat s3c24xx 目錄下都有include目錄的。include printk include kmalloc include...

codeblok中lib庫的呼叫和標頭檔案的包含

在編譯鏈結庫時,找不到標頭檔案和庫,折騰了半天,終於搞定 在ubutun中使用codeblocks 編譯時鏈結不上頭檔案和庫時,請在setting complier and debugger link setting options 加上需要鏈結的描述檔案。描述檔案一般在 usr lib pkgco...

C C 標頭檔案作用

參考 c標頭檔案 由來 那是乙個被遺忘的年代,在編譯器只認識.c cpp 檔案,而不知道.h是何物的年代。那時的人們寫了很多的.c cpp 檔案,漸漸地,人們發現在很多.c cpp 檔案中的宣告語句就是相同的,但他們卻不得不乙個字乙個字地重複地將這些內容敲入每個.c cpp 檔案。但更為恐怖的是,當...