歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 解讀Linux編程庫(二)

解讀Linux編程庫(二)

日期:2017/2/25 10:38:06   编辑:Linux教程

  2.ldconfig

  ldconfig命令的作用是決定位於目錄/usr/lib和/lib下的共享庫所需的運行鏈接。這些鏈接保存在的Libs保存在/et/ld.so.conf文件中。搜索出可共享的動態鏈接庫(格式如前介紹,lib*.so*),進而創建出動態裝入程序(ld.so)所需的鏈接和緩存文件。緩存文件默認為/etc/ld.so.cache,此文件保存已排好序的動態鏈接庫名字列表。

  (1)命令格式

  ldconfig [選項] [libs]

  (2)主要選項

  -v或--verbose ldconfig將顯示正在掃描的目錄、搜索到的動態鏈接庫,以及它所創建的連接的名字。

  -f CONF 指定動態鏈接庫的配置文件為CONF,系統默認為/etc/ld.so.conf。

  -C CACHE 指定生成的緩存文件為CACHE,系統默認的是/etc/ld.so.cache,文件存放已排好序的可共享的動態鏈接庫的列表。

  -p或--print-cache 讓ldconfig打印出當前緩存文件所保存的所有共享庫的名字。

  -r ROOT 改變應用程序的根目錄為ROOT。

  -n ldconfig僅掃描命令行指定的目錄,不掃描默認目錄(/lib、/usr/lib),也不掃描配置文件/etc/ld.so.conf所列的目錄。

  運行沒有選項的ldconfig命令時,用於更新高速緩沖文件。這個命令主要用於高速緩沖DNS服務器(Caching DNS Server)。高速緩沖DNS服務器的原理是提供查詢的歷史記錄,並且利用這些記錄來提高查詢的效率。

  當某個查詢是第一次被發送到高速緩沖DNS服務器時,高速緩沖DNS服務器就將此查詢的整個過程記錄下來,在一定的時期內用它來回答所有相同的查詢,從而減少整個DNS系統的負擔並且提高查詢速度。

  (3)應用實例

  如果用戶想知道系統中有哪些動態鏈接庫,或者想知道系統中有沒有某個動態鏈接庫時,可用-p選項讓ldconfig輸出緩存文件中的動態鏈接庫列表,從而查詢得到。

  ldconfig -p

  998 libs found in cache `/etc/ld.so.cache'

  libzvt.so.2 (libc6) => /usr/lib/libzvt.so.2

  libzvt.so (libc6) => /usr/lib/libzvt.so

  ……

  ldconfig命令輸出結果表明,在緩存文件/etc/ld.so.cache中找到998個共享庫,下一行開始便是一系列共享庫的名字及其全名(絕對路徑)。因為實際輸出結果很多,為節省篇幅以“……”表示省略的部分。

  庫的升級

  Linux系統軟件更新很快,新的核心幾乎每幾個星期就公布一次,其它軟件的更新也是非常頻繁。多數情況下,盲目跟隨潮流的升級並不必要,如果確實需要新版本的特性時再升級。換句話說,不要為了升級而升級。Linux系統中多數軟件都是用共享庫來編譯的,其中包含了在不同程序之間共享的公用子例程。

  在運行某個程序時,如果看到如下信息:“Incompatible library version.”則表明需要將該庫升級到程序所需要的版本。庫是向下兼容的,也就是說,用老版本庫編譯的程序可以在新安裝的版本庫上運行,反之則不行。

  Linux庫函數的升級是一項重要的工作,往往與其它軟件包的升級有一定關聯作用,所以操作前一定要備份文件。下面看一下如何把Glibc 2.2.4.13升級至2.3.2版本,其過程如下:

  1.下載.gz壓縮文件並解壓

  在GUN C網站下載的四個.gz壓縮文件,解壓至一臨時目錄中:

  cd /usr/caolinux

  tar xzvf glibc-2.3.2.tar.gz

  cd glibc-2.3.2

  tar xzvf ../glibc-linuxthreads-2.3.2.tar.gz

  tar xzvf ../glibc-crypt-2.3.2.tar.gz

  tar xzvf ../glibc-localedata-2.3.2.tar.gz

  2.建立庫函數的安裝目錄

  mkdir /usr/higlibc

  cd /usr/higlibc

  3.建立編譯目錄

  mkdir cao

  cd cao

  ./configure --enable-add-ons=linuxthreads,crypt,localedata -prefix

  =/usr/higlibc

  4.編譯與安裝

  make

  make check

  make install

  編譯與安裝過程根據計算機硬件配置不同,從10分鐘到幾十分鐘不等。

  5.改變數據庫的鏈接

  ln -s /usr/higlibc/lib/ld-linux.so.2 /lib/ld-linux.so.2

  然後,修改/etc/ld.so.conf,加入一行/usr/higlibc/lib,執行下面代碼:

  ldconfig -v

  更新/etc/ld.so.cache的內容,列出每個庫的版本號,掃描目錄和所要創建及更新的鏈接。

  6.更改GCC設置

  cd /usr/lib/gcc-lib

  cp -r i386-redhat-linux higlibc

  7.更新符號鏈接

  cd /usr/higlibc/include

  ln -s /usr/src/linux/include/linux

  ln -s /usr/src/linux/include/asm

  ln -s /usr/X11R6/include/X11

  8.測試

  編寫一個簡單的C程序測試一下,除了頭文件只需一條printf語句即可:

  #include

  int main(void)

  { printf ("Hello , Linux !\n");

  return 0;}

  然後用GCC編譯一次,當程序出現如下運行結果,則說明已經正確地升級了。

  “Hello, Linux !”

  以上五部分分別介紹了Linux庫的定義屬性、“標准”庫的命名和編號約定、經常使用的庫、與庫操作相關命令的作用,以及庫升級的步驟,希望能對初學Linux的開發者有所幫助。

Copyright © Linux教程網 All Rights Reserved