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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

ldconfig及 LD_LIBRARY_PATH

發布時間:2023/11/27 生活经验 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ldconfig及 LD_LIBRARY_PATH 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ldconfig及 LD_LIBRARY_PATH

1. 往/lib和/usr/lib里面加東西,是不用修改/etc/ld.so.conf的,但是完了之后要調一下ldconfig,不然這個library會找不到

2.想往上面兩個目錄以外加東西的時候,一定要修改/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才能在程序運行時被找到。

3.如果想在這兩個目錄以外放lib,但是又不想在/etc/ld.so.conf中加東西(或者是沒有權限加東西)。那也可以,就是export一個全局變量LD_LIBRARY_PATH,然后運行程序的時候就會去這個目錄中找library。一般來講這只是一種臨時的解決方案,在沒有權限或臨時需要的時候使用。

4. ldconfig做的這些東西都與運行程序時有關,跟編譯時一點關系都沒有。編譯的時候還是該加-L就得加,不要混淆了。

5. 總之,就是不管做了什么關于library的變動后,最好都ldconfig一下,不然會出現一些意想不到的結果。不會花太多的時間,但是會省很多的事。

幾個特殊的環境變量: LD_DEBUG的用法:

[root@ljj c_c++]# LD_DEBUG=help ls Valid options for the LD_DEBUGenvironment variable are: libs display library search paths relocdisplay relocation processing files display progress for input filesymbols display symbol table processing bindings display informationabout symbol binding versions display version dependencies all allprevious options combined statistics display relocation statisticsunused determined unused DSOs help display this help message and exitTo direct the debugging output into a file instead of standard output afilename can be specified using the LD_DEBUG_OUTPUT environmentvariable.

[root@ljj c_c++]#

Linux支持共享庫已經有悠久的歷史了,不再是什么新概念了。大家都知道如何編譯、連接以及動態加載(dlopen/dlsym/dlclose)共享庫。但是,可能很多人,甚至包括一些高手,對共享庫相關的一些環境變量認識模糊。當然,不知道這些環境變量,也可以用共享庫,但是,若知道它們,可能就會用得更好。下面介紹一些常用的環境變量,希望對家有所幫助: LD_LIBRARY_PATH這個環境變量是大家最為熟悉的,它告訴loader:在哪些目錄中可以找到共享庫??梢栽O置多個搜索目錄,這些目錄之間用冒號分隔開。在linux下,還提供了另外一種方式來完成同樣的功能,你可以把這些目錄加到/etc/ld.so.conf中,或則在/etc/ld.so.conf.d里創建一個文件,把目錄加到這個文件里。當然,這是系統范圍內全局有效的,而環境變量只對當前shell有效。按照慣例,除非你用上述方式指明,loader是不會在當前目錄下去找共享庫的,正如shell不會在當前目前找可執行文件一樣。 LD_PRELOAD這個環境變量對于程序員來說,也是特別有用的。它告訴loader:在解析函數地址時,優先使用LD_PRELOAD里指定的共享庫中的函數。這為調試提供了方便,比如,對于C/C++程序來說,內存錯誤最難解決了。常見的做法就是重載malloc系列函數,但那樣做要求重新編譯程序,比較麻煩。使用LD_PRELOAD機制,就不用重新編譯了,把包裝函數庫編譯成共享庫,并在LD_PRELOAD加入該共享庫的名稱,這些包裝函數就會自動被調用了。在linux下,還提供了另外一種方式來完成同樣的功能,你可以把要優先加載的共享庫的文件名寫在/etc/ld.so.preload里。當然,這是系統范圍內全局有效的,而環境變量只對當前shell有效。 LD_ DEBUG這個環境變量比較好玩,有時使用它,可以幫助你查找出一些共享庫的疑難雜癥(比如同名函數引起的問題)。同時,利用它,你也可以學到一些共享庫加載過程的知識。它的參數如下: libs display library search paths reloc display relocationprocessing files display progress for input file symbols display symboltable processing bindings display information about symbol bindingversions display version dependencies all all previous options combinedstatistics display relocation statistics unused determined unused DSOshelp display this help message and exit BIND_NOW這個環境變量與dlopen中的flag的意義是一致,只是dlopen中的flag適用于顯示加載的情況,而BIND_NOW/BIND_NOT適用于隱式加載。LD_PROFILE/LD_PROFILE_OUTPUT:為指定的共享庫產生profile數據,LD_PROFILE指定共享庫的名稱,LD_PROFILE_OUTPUT指定輸出profile文件的位置,是一個目錄,且必須存在,默認的目錄為/var/tmp/或/var/profile。通過profile數據,你可以得到一些該共享庫中函數的使用統計信息。

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/hahapro/archive/2008/04/01/2237654.aspx


總結

以上是生活随笔為你收集整理的ldconfig及 LD_LIBRARY_PATH的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。