日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux共享库及/etc/ld.so.conf文件的应用

發(fā)布時(shí)間:2023/12/9 linux 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux共享库及/etc/ld.so.conf文件的应用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Linux 共享庫 ?

Linux 系統(tǒng)上有兩類根本不同的 Linux 可執(zhí)行程序。第一類是靜態(tài)鏈接的可執(zhí)行程序。靜態(tài)可執(zhí)行程序包含執(zhí)行所需的所有函數(shù) —換句話說,它們是“完整的”。因?yàn)檫@一原因,靜態(tài)可執(zhí)行程序不依賴任何外部庫就可以運(yùn)行。

  第二類是動(dòng)態(tài)鏈接的可執(zhí)行程序。

靜態(tài)可執(zhí)行程序與動(dòng)態(tài)可執(zhí)行程序比較

  我們可以用 ldd 命令來確定某一特定可執(zhí)行程序是否為靜態(tài)鏈接的:
  # ldd /sbin/sln
  not a dynamic executable
  “not a dynamic executable”是 ldd 說明 sln 是靜態(tài)鏈接的一種方式?,F(xiàn)在,讓我們比較 sln與其非靜態(tài)同類 ln 的大小:
  # ls -l /bin/ln /sbin/sln
  -rwxr-xr-x 1root root 23000 Jan 14 00:36 /bin/ln
  -rwxr-xr-x 1root root 381072 Jan 14 00:31 /sbin/sln
  如您所見,sln 的大小超過 ln 十倍。ln 比 sln小這么多是因?yàn)樗莿?dòng)態(tài)可執(zhí)行程序。動(dòng)態(tài)可執(zhí)行程序是不完整的程序,它依靠外部共享庫來提供運(yùn)行所需的許多函數(shù)。

動(dòng)態(tài)鏈接相關(guān)性

  要查看 ln 依賴的所有共享庫的列表,可以使用 ldd 命令:
  # ldd /bin/ln
  libc.so.6 => /lib/libc.so.6 (0x40021000)
  /lib/ld-linux.so.2 => /lib/ld-linux.so.2(0x40000000)

  如您所見,ln 依賴外部共享庫 libc.so.6 和ld-linux.so.2。通常,動(dòng)態(tài)鏈接的程序比其靜態(tài)鏈接的等價(jià)程序小得多。不過,靜態(tài)鏈接的程序可以在某些低級(jí)維護(hù)任務(wù)中發(fā)揮作用。例如,sln是修改位于 /lib 中的不同庫符號(hào)鏈接的極佳工具。但通常您會(huì)發(fā)現(xiàn)幾乎所有 Linux系統(tǒng)上的可執(zhí)行程序都是某種動(dòng)態(tài)鏈接的變體。

 動(dòng)態(tài)裝入器

  那么,如果動(dòng)態(tài)可執(zhí)行程序不包含運(yùn)行所需的所有函數(shù),Linux的哪部分負(fù)責(zé)將這些程序和所有必需的共享庫一起裝入,以使它們能正確執(zhí)行呢?答案是動(dòng)態(tài)裝入器(dynamicloader),它實(shí)際上是您在 ln 的 ldd 清單中看到的作為共享庫相關(guān)性列出的 ld-linux.so.2庫。動(dòng)態(tài)裝入器負(fù)責(zé)裝入動(dòng)態(tài)鏈接的可執(zhí)行程序運(yùn)行所需的共享庫?,F(xiàn)在,讓我們迅速查看一下動(dòng)態(tài)裝入器如何在系統(tǒng)上找到適當(dāng)?shù)墓蚕韼臁?/p>

  ld.so.conf

  動(dòng)態(tài)裝入器找到共享庫要依靠?jī)蓚€(gè)文件 — /etc/ld.so.conf 和 /etc/ld.so.cache。如果您對(duì)/etc/ld.so.conf 文件進(jìn)行 cat 操作,您可能會(huì)看到一個(gè)與下面類似的清單:

  $ cat /etc/ld.so.conf

  /usr/X11R6/lib

  /usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.3

  /usr/lib/mozilla

  /usr/lib/qt-x11-2.3.1/lib

  /usr/local/lib

  ld.so.conf 文件包含一個(gè)所有目錄(/lib 和 /usr/lib除外,它們會(huì)自動(dòng)包含在其中)的清單,動(dòng)態(tài)裝入器將在其中查找共享庫。

  ld.so.cache

  但是在動(dòng)態(tài)裝入器能“看到”這一信息之前,必須將它轉(zhuǎn)換到 ld.so.cache 文件中??梢酝ㄟ^運(yùn)行 ldconfig命令做到這一點(diǎn):

  # ldconfig

  當(dāng) ldconfig 操作結(jié)束時(shí),您會(huì)有一個(gè)最新的 /etc/ld.so.cache 文件,它反映您對(duì)/etc/ld.so.conf 所做的更改。從這一刻起,動(dòng)態(tài)裝入器在尋找共享庫時(shí)會(huì)查看您在 /etc/ld.so.conf中指定的所有新目錄。

ldconfig 技巧

  要查看 ldconfig 可以“看到”的所有共享庫,請(qǐng)輸入:

  # ldconfig -p | less

  還有另一個(gè)方便的技巧可以用來配置共享庫路徑。有時(shí)候您希望告訴動(dòng)態(tài)裝入器在嘗試任何 /etc/ld.so.conf路徑以前先嘗試使用特定目錄中的共享庫。在您運(yùn)行的較舊的應(yīng)用程序不能與當(dāng)前安裝的庫版本一起工作的情況下,這會(huì)比較方便。

  LD_LIBRARY_PATH

  要指示動(dòng)態(tài)裝入器首先檢查某個(gè)目錄,請(qǐng)將 LD_LIBRARY_PATH變量設(shè)置成您希望搜索的目錄。多個(gè)路徑之間用冒號(hào)分隔;例如:

  # export LD_LIBRARY_PATH="/usr/lib/old:/opt/lib"

  導(dǎo)出 LD_LIBRARY_PATH 后,如有可能,所有從當(dāng)前 shell 啟動(dòng)的可執(zhí)行程序都將使用/usr/lib/old 或 /opt/lib 中的庫,如果仍不能滿足一些共享庫相關(guān)性要求,則轉(zhuǎn)回到 /etc/ld.so.conf中指定的庫。


轉(zhuǎn)載于:https://blog.51cto.com/wushank/1287160

總結(jié)

以上是生活随笔為你收集整理的linux共享库及/etc/ld.so.conf文件的应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。