1. 程式人生 > >linux命令之新增系統搜尋動態庫目錄-ldconfig

linux命令之新增系統搜尋動態庫目錄-ldconfig

ldconifg,/etc/ld.so.conf,/etc/ld.so.cache三個的關係

一般情況下我們可以將程式需要搜尋動態庫的路徑配置到ld_library_path這個環境變數中,不過很多系統的庫我們沒有配置到這個環境變數中也是可以找到的,ldconfig就如同windows的系統環境變數,ldconfig命令的用途就是新增掃描到的動態庫路徑到系統搜尋動態庫的配置檔案中。

這個動態庫路徑配置檔案就叫ld.so.cache,看名字更像是一個庫路徑的緩衝區,我們可以輸入命令cat /etc/ld.so.cache看看裡面滿滿的都是庫的路徑:

libzzipwrap-0.so.13/usr/lib/x86_64-linux-gnu/libzzipwrap-0.so.13libzzipmmapped-0.so.13/usr/lib/x86_64-linux-gnu/libzzipmmapped-0.so.13libzzipfseeko-0.so.13
/usr/lib/x86_64-linux-gnu/libzzipfseeko-0.so.13libzzip-0.so.13/usr/lib/x86_64-linux-gnu/libzzip-0.so.13libzvbi.so.0
/usr/lib/x86_64-linux-gnu/libzvbi.so.0libzvbi-chains.so.0/usr/lib/x86_64-linux-gnu/libzvbi-chains.so.0libzmq.so.5
/usr/lib/x86_64-linux-gnu/libzmq.so.5libz.so.1/lib/x86_64-linux-gnu/libz.so.1libz.so/usr/lib/x86_64-linux-gnu/libz.solibyaml-0.so.2
/usr/lib/x86_64-linux-gnu/libyaml-0.so.2libyaml-cpp.so.0.5/usr/lib/x86_64-linux-gnu/libyaml-cpp.so.0.5libyajl.so.2
/usr/lib/x86_64-linux-gnu/libyajl.so.2libx265.so.79/usr/lib/x86_64-linux-gnu/libx265.so.79libx264.so.148
/usr/lib/x86_64-linux-gnu/libx264.so.148libxvidcore.so.4/usr/lib/x86_64-linux-gnu/libxvidcore.so.4libxtables.so.11
/lib/x86_64-linux-gnu/libxtables.so.11libxslt.so.1/usr/lib/x86_64-linux-gnu/libxslt.so.1libxshmfence.so.1
/usr/lib/x86_64-linux-gnu/libxshmfence.so.1libxshmfence.so/usr/lib/x86_64-linux-gnu/libxshmfence.solibxml2.so.2
/usr/lib/x86_64-linux-gnu/libxml2.so.2libxml2.so/usr/lib/x86_64-linux-gnu/libxml2.solibxkbcommon.so.0
/usr/lib/x86_64-linux-gnu/libxkbcommon.so.0libxcb.so.1/usr/lib/x86_64-linux-gnu/libxcb.so.1libxcb.so
/usr/lib/x86_64-linux-gnu/libxcb.solibxcb-xinerama.so.0/usr/lib/x86_64-linux-gnu/libxcb-xinerama.so.0libxcb-xfixes.so.0
/usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0libxcb-xfixes.so/usr/lib/x86_64-linux-gnu/libxcb-xfixes.solibxcb-sync.so.1
/usr/local/samba/lib/libwbclient.so.0libwbclient.so/usr/local/samba/lib/libwbclient.solibwayland-server.so.0
/usr/lib/x86_64-linux-gnu/libwayland-server.so.0libwayland-egl.so.1/usr/lib/x86_64-linux-gnu/libwayland-egl.so.1libwayland-cursor.so.0
/usr/lib/x86_64-linux-gnu/libwayland-cursor.so.0libwayland-client.so.0/usr/lib/x86_64-linux-gnu/libwayland-client.so.0libwavpack.so.1
/usr/lib/x86_64-linux-gnu/libwavpack.so.1libv8.so.3.14.5/usr/lib/libv8.so.3.14.5libv4l2.so.0/usr/lib/x86_64-linux-gnu/libv4l2.so.0libv4l1.so.0
(實際看是沒有換行的,還有一些亂碼,畢竟不是文字格式來寫,這裡只是為了看的清楚手動換了行)。

ldconfig的原理是通過掃描預設目錄/lib和/usr/lib,以及/etc/ld.so.conf中配置的目錄,將裡面的所有動態庫路徑儲存到一個ld.so.cache檔案中,然後執行程式的時候就在裡面搜尋程式所需要的庫。

所以往上面兩個預設目錄中加了新的庫要執行一下ldconfi命令,以便將新新增的庫路徑新增到ld.so.cache中;往ld.so.conf中加了新的路徑,也要執行一下ldconfig命令,以便掃描新加的目錄將新目錄中的動態庫路徑新增到ld.so.cache中。

另外想要切換到sudo執行路徑,要執行sudo ldconfig命令。

在終端輸入ldconfig --help檢視其他的選項:

用法: ldconfig.real [選項...]
設定執行時期動態連線

  -c, --format=FORMAT        採用的格式:新、舊或相容(預設)
  -C CACHE                   將 CACHE 用作緩衝區檔案
  -f CONF                    將 CONF 用作配置檔案
  -i, --ignore-aux-cache     忽略輔助快取檔案
  -l                         手工連線獨立的庫。
  -n
                             只在命令列中給出了程序目錄。未建立緩衝區。
  -N                         不要建立緩衝區
  -p, --print-cache          列印緩衝區
  -r ROOT                    進入 ROOT 目錄並將其作為根目錄
  -v, --verbose              生成詳細訊息
  -X                         Don't update symbolic links
  -?, --help                 給出該系統求助列表
      --usage                給出簡要的用法資訊
  -V, --version              列印程式版本號

長選項的強制或可選引數對對應的短選項也是強制或可選的。

要知道錯誤報告指令,請參看:
<https://bugs.launchpad.net/ubuntu/+source/glibc/+bugs>。