ubuntu ldconfig

1.簡單問題

安裝軟件之後,需要鏈接庫到系統,不然編譯失敗

  • ln -s /where/you/install/lib/*.so /usr/lib

  • sudo ldconfig

2.ldconfig命令的作用

  1.  ldconfig在/sbin裏面。ldconfig是一個動態鏈接庫管理命令。爲了讓動態鏈接庫爲系統所共享,還需運行動態鏈接庫的管理命令--ldconfig
  2. ldconfig  命令的用途,主要是在默認搜尋目錄(/lib和/usr/lib)以及動態庫配置文件/etc/ld.so.conf內所列的目錄下,搜索出可共享的動態 鏈接庫(格式如前介紹,lib*.so*),進而創建出動態裝入程序(ld.so)所需的連接和緩存文件.緩存文件默認爲  /etc/ld.so.cache,此文件保存已排好序的動態鏈接庫名字列表.
  3. ldconfig通常在系統啓動時運行,而當用戶安裝了一個新的動態鏈接庫時,就需要手工運行這個命令.

    ldconfig可用的選項說明如下:
    (1) -v或--verbose : 用此選項時,ldconfig將顯示正在掃描的目錄及搜索到的動態鏈接庫,還有它所創建的連接的名字.
    (2) -n : 用此選項時,ldconfig僅掃描命令行指定的目錄,不掃描默認目錄(/lib,/usr/lib),也不掃描配置文件/etc/ld.so.conf所列的目錄.
    (3) -N : 此選項指示ldconfig不重建緩存文件(/etc/ld.so.cache).若未用-X選項,ldconfig照常更新文件的連接.
    (4) -X : 此選項指示ldconfig不更新文件的連接.若未用-N選項,則緩存文件正常更新.
    (5) -f CONF : 此選項指定動態鏈接庫的配置文件爲CONF,系統默認爲/etc/ld.so.conf.
    (6) -C CACHE : 此選項指定生成的緩存文件爲CACHE,系統默認的是/etc/ld.so.cache,此文件存放已排好序的可共享的動態鏈接庫的列表.
    (7)  -r ROOT : 此選項改變應用程序的根目錄爲ROOT(是調用chroot函數實現的).選擇此項時,系統默認的配置文件 /etc/ld.so.conf,實際對應的爲 ROOT/etc/ld.so.conf.如用-r /usr/zzz時,打開配置文件 /etc/ld.so.conf時,實際打開的是/usr/zzz/etc/ld.so.conf文件.用此選項,可以大大增加動態鏈接庫管理的靈活性.
    (8) -l : 通常情況下,ldconfig搜索動態鏈接庫時將自動建立動態鏈接庫的連接.選擇此項時,將進入專家模式,需要手工設置連接.一般用戶不用此項.
    (9) -p或--print-cache : 此選項指示ldconfig打印出當前緩存文件所保存的所有共享庫的名字.
    (10) -c FORMAT 或 --format=FORMAT : 此選項用於指定緩存文件所使用的格式,共有三種: ld(老格式),new(新格式)和compat(兼容格式,此爲默認格式).
    (11) -V : 此選項打印出ldconfig的版本信息,而後退出.
    (12) -? 或 --help 或 --usage : 這三個選項作用相同,都是讓ldconfig打印出其幫助信息,而後退出.
  4. ldconfig命令行用法如下:
  5. ldconfig [-v|--verbose] [-n] [-N] [-X] [-f CONF] [-C CACHE] [-r ROOT] [-l] [-p|--print-cache] 
  6.         [-c FORMAT] [--format=FORMAT] [-V] [-?|--help|--usage] path...
  7. linux下的共享庫機制採用了類似於高速緩存的機制,將庫信息保存在/etc/ld.so.cache裏邊。
  8. 程序連接的時候首先從這個文件裏邊查找,然後再到ld.so.conf的路徑裏邊去詳細找。
  9. 這就是爲什麼修改了ld.so.conf要重新運行一下ldconfig的原因

3.簡單案例

1.比如,我編譯完 boost 後(boost 的有些庫需要編譯後生成動態或靜態庫使用,例如 Python,Regex 等,詳見 Boost 說明文檔),需要將編譯庫路徑,比如 /usr/local/lib 加入運行時動態綁定的搜索路徑,步驟如下:

  1. Ubuntu 下,在 /etc/ld.so.conf.d 目錄下新建配置文件,比如 boost_lib.conf,編輯其內容爲:/usr/local/lib
  2. 然後運行,$ sudo ldconfig
  3. 然後應用程序就能正確找到 boost 相關鏈接文件了。

2.比如我編譯了stage庫,但是安裝到了  /usr/local/lib中,我需要運行

  • sudo ldconfig
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章