ldconfig是一個動態鏈接庫管理命令,為了讓動態鏈接庫為系統所共享,還需運行動態鏈接庫的管理命令:ldconfig。ldconfig 命令的用途,主要是在默認搜尋目錄 (/lib和/usr/lib) 以及動態庫配置文件/etc/ld.so.conf內所列的目錄下,搜索出可共享的動態鏈接庫(格式如前介紹,lib.so),進而創建出動態裝入程序 (ld.so) 所需的連接和緩存文件.緩存文件默認為 /etc/ld.so.cache,此文件保存已排好序的動態鏈接庫名字列表。
-
往 /lib 和 /usr/lib 里面加東西,是不用修改 /etc/ld.so.conf 的,但是完了之后要調一下 ldconfig,不然這個 library 會找不到。
-
想往上面兩個目錄以外加東西的時候,一定要修改 /etc/ld.so.conf,然后再調用 ldconfig,不然也會找不到比 如安裝了一個 mysql到 /usr/local/mysql,mysql 有一大堆 library 在 /usr/local/mysql/lib 下面,這時就 需要在 /etc/ld.so.conf 下面加一行 /usr/local/mysql/lib,保存過后 ldconfig 一下,新的 library 才能在程序運行時被找到。
-
如果想在這兩個目錄以外放lib,但是又不想在 /etc/ld.so.conf 中加東西(或者是沒有權限加東西)。那也可以,就是 export 一個全局變量 LD_LIBRARY_PATH ,然后運行程序的時候就會去這個目錄中找 library。一般來講這只是一種臨時的解決方案,在沒有權限或臨時需要的時候使用。
-
ldconfig 做的這些東西都與運行程序時有關,跟編譯時一點關系都沒有。編譯的時候還是該加-L就得加,不要混淆了。
-
總之,就是不管做了什么關於 library 的變動后,最好都 ldconfig 一下,不然會出現一些意想不到的結果。不會花太多的時間,但是會省很多的事。
-
LD_LIBRARY_PATH 這個環境變量是大家最為熟悉的,它告訴loader:在哪些目錄中可以找到共享庫。可以設置多個搜索目錄,這些目錄之間用冒號分隔開。在linux下,還提供了另外一種方式來完成同樣的功能,你可以把這些目錄加到 /etc/ld.so.conf 中,或着在 /etc/ld.so.conf.d 里創建一個文件,把目錄加到這個文件里。當然,這是系統范圍內全局有效的,而環境變量只對當前 shell 有效。按照慣例,除非你用上述方式指明,loader 是不會在當前目錄下去找共享庫的,正如shell不會在當前目前找可執行文件一樣。