淺談Linux中l(wèi)dconfig和ldd的用法
ldd 查看程序依賴(lài)庫(kù)
ldd
作用:用來(lái)查看程式運(yùn)行所需的共享庫(kù),常用來(lái)解決程式因缺少某個(gè)庫(kù)文件而不能運(yùn)行的一些問(wèn)題。
示例:查看test程序運(yùn)行所依賴(lài)的庫(kù):
/opt/app/todeav1/test$ldd test
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000039a7e00000)
libm.so.6 => /lib64/libm.so.6 (0x0000003996400000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000039a5600000)
libc.so.6 => /lib64/libc.so.6 (0x0000003995800000)
/lib64/ld-linux-x86-64.so.2 (0x0000003995400000)
•第一列:程序需要依賴(lài)什么庫(kù)
•第二列: 系統(tǒng)提供的與程序需要的庫(kù)所對(duì)應(yīng)的庫(kù)
•第三列:庫(kù)加載的開(kāi)始地址
通過(guò)上面的信息,我們可以得到以下幾個(gè)信息:
1.通過(guò)對(duì)比第一列和第二列,我們可以分析程序需要依賴(lài)的庫(kù)和系統(tǒng)實(shí)際提供的,是否相匹配
2.通過(guò)觀察第三列,我們可以知道在當(dāng)前的庫(kù)中的符號(hào)在對(duì)應(yīng)的進(jìn)程的地址空間中的開(kāi)始位置
如果依賴(lài)的某個(gè)庫(kù)找不到,通過(guò)這個(gè)命令可以迅速定位問(wèn)題所在;
注解
原理: ldd不是個(gè)可執(zhí)行程式,而只是個(gè)shell腳本; ldd顯示可執(zhí)行模塊的dependency的工作原理,其實(shí)質(zhì)是通過(guò)ld-linux.so(elf動(dòng)態(tài)庫(kù)的裝載器)來(lái)實(shí)現(xiàn)的。ld-linux.so模塊會(huì)先于executable模塊程式工作,并獲得控制權(quán),因此當(dāng)上述的那些環(huán)境變量被設(shè)置時(shí),ld-linux.so選擇了顯示可執(zhí)行模塊的dependency。
--------------------------------------------------------------
ldconfig是一個(gè)動(dòng)態(tài)鏈接庫(kù)管理命令,為了讓動(dòng)態(tài)鏈接庫(kù)為系統(tǒng)所共享,還需運(yùn)行動(dòng)態(tài)鏈接庫(kù)的管理命令–ldconfig。 ldconfig 命令的用途,主要是在默認(rèn)搜尋目錄(/lib和/usr/lib)以及動(dòng)態(tài)庫(kù)配置文件/etc/ld.so.conf內(nèi)所列的目錄下,搜索出可共享的動(dòng)態(tài) 鏈接庫(kù)(格式如前介紹,lib*.so*),進(jìn)而創(chuàng)建出動(dòng)態(tài)裝入程序(ld.so)所需的連接和緩存文件.緩存文件默認(rèn)為 /etc/ld.so.cache,此文件保存已排好序的動(dòng)態(tài)鏈接庫(kù)名字列表.
linux下的共享庫(kù)機(jī)制采用了類(lèi)似于高速緩存的機(jī)制,將庫(kù)信息保存在/etc/ld.so.cache里邊。
程序連接的時(shí)候首先從這個(gè)文件里邊查找,然后再到ld.so.conf的路徑里邊去詳細(xì)找。
這就是為什么修改了ld.so.conf要重新運(yùn)行一下ldconfig的原因
補(bǔ)充一點(diǎn),ldconfig在/sbin里面。
ldconfig幾個(gè)需要注意的地方
1. 往/lib和/usr/lib里面加?xùn)|西,是不用修改/etc/ld.so.conf的,但是完了之后要調(diào)一下ldconfig,不然這個(gè)library會(huì)找不到
2. 想往上面兩個(gè)目錄以外加?xùn)|西的時(shí)候,一定要修改/etc/ld.so.conf,然后再調(diào)用ldconfig,不然也會(huì)找不到
比如安裝了一個(gè)mysql到/usr/local/mysql,mysql有一大堆library在/usr/local/mysql /lib下面,這時(shí) 就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存過(guò)后ldconfig一下,新的library才能在 程序運(yùn)行時(shí)被找到。
3. 如果想在這兩個(gè)目錄以外放lib,但是又不想在/etc/ld.so.conf中加?xùn)|西(或者是沒(méi)有權(quán)限加?xùn)|西)。那也可以,就是export一個(gè)全局變 量LD_LIBRARY_PATH,然后運(yùn)行程序的時(shí)候就會(huì)去這個(gè)目錄中找library。一般來(lái)講這只是一種臨時(shí)的解決方案,在沒(méi)有權(quán)限或臨時(shí)需要的時(shí) 候使用。
4. ldconfig做的這些東西都與運(yùn)行程序時(shí)有關(guān),跟編譯時(shí)一點(diǎn)關(guān)系都沒(méi)有。編譯的時(shí)候還是該加-L就得加,不要混淆了。
5. 總之,就是不管做了什么關(guān)于library的變動(dòng)后,最好都ldconfig一下,不然會(huì)出現(xiàn)一些意想不到的結(jié)果。不會(huì)花太多的時(shí)間,但是會(huì)省很多的事。
以上這篇淺談Linux中l(wèi)dconfig和ldd的用法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
LuManager Linux/Unix服務(wù)器管理面板推薦之國(guó)產(chǎn)面板
國(guó)外VPS 大多數(shù)是 Linux /Unix平臺(tái),Linux/Unix平臺(tái)的優(yōu)點(diǎn)也很多,重點(diǎn)是它還是免費(fèi)的,(用過(guò)美國(guó)VPS 的朋友都知道國(guó)外IDC 裝Windows是需要版權(quán)費(fèi)的)國(guó)內(nèi)大型網(wǎng)站幾乎都是用Linux/Unix平臺(tái)2012-09-09Win10 安裝Linux ubuntu-18.04雙系統(tǒng)(安裝指南)
這篇文章主要介紹了Win10+Linux ubuntu-18.04雙系統(tǒng)安裝教程,本文分步驟給大家記錄下來(lái),需要的朋友可以參考下2019-10-10CentOS平臺(tái)實(shí)現(xiàn)搭建rsync遠(yuǎn)程同步服務(wù)器的方法
這篇文章主要介紹了CentOS平臺(tái)實(shí)現(xiàn)搭建rsync遠(yuǎn)程同步服務(wù)器的方法,較為詳細(xì)的分析了CentOS搭建rsync遠(yuǎn)程同步服務(wù)器的具體步驟、相關(guān)命令與注意事項(xiàng),需要的朋友可以參考下2018-04-04Apache POI簡(jiǎn)介及應(yīng)用場(chǎng)景
Apache POI 是一個(gè)處理Miscrosoft Office各種文件格式的開(kāi)源項(xiàng)目,我們可以使用POI在Java程序中對(duì)Miscrosoft Office各種文件進(jìn)行讀寫(xiě)操作,本文給大家介紹Apache POI簡(jiǎn)介,感興趣的朋友一起看看吧2023-11-11linux Centos7斷網(wǎng)下安裝應(yīng)用程序詳解
在本篇文章里小編給大家整理的是關(guān)于linux最新版本Centos7,斷網(wǎng)情況下安裝應(yīng)用程序相關(guān)步驟,需要的朋友們可以學(xué)習(xí)下。2019-08-08動(dòng)態(tài)庫(kù)調(diào)用靜態(tài)庫(kù)示例講解
一個(gè)應(yīng)用程序調(diào)用動(dòng)態(tài)庫(kù), 而這個(gè)動(dòng)態(tài)庫(kù)其中的函數(shù)調(diào)用某靜態(tài)庫(kù)時(shí),如何生成應(yīng)用程序呢?看下面的代碼就明白了2013-12-12詳解Linux查看實(shí)時(shí)網(wǎng)卡流量的幾種方式
本篇文章中主要介紹了詳解Linux查看實(shí)時(shí)網(wǎng)卡流量的幾種方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05