ldd命令

在linux中, ldd是list, dynamic, dependencies的縮寫, 意思是, 列出動態庫依賴關系。 當然, 你也可以用ldd –help或者man ldd來看其用法。

ldd本身不是一個程序,而僅是一個shell腳本:ldd可以列出一個程序所需要得動態鏈接庫(so)

我們可以用which命令找到ldd的位置:

$ which ldd

/usr/bin/ldd

在制作自己的發行版時經常需要判斷某條命令需要哪些共享庫文件的支持,以確保指定的命令在獨立的系統內可以可靠的運行;//摘抄的

在Linux環境下通過ldd命令即可實現,在終端下執行:

ldd /bin/ls

ldd命令通常使用"-v"或"–verbose"選項來顯示所依賴的動態連接庫的盡可能的詳細信息。

即可得到/bin/ls命令的相關共享庫文件列表:

root@xxhui:/home/hui# ldd /bin/ls

linux-vdso.so.1 (0x00007ffeeffc3000)

libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f8e631c7000)

libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f8e62fbe000)

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8e62c19000)

libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f8e629a9000)

libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8e627a5000)

/lib64/ld-linux-x86-64.so.2 (0x00005599a18e8000)

libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f8e6259f000)

libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8e62382000)

註意: 在 ldd 命令打印的結果中,“=>”左邊的表示該程序需要連接的共享庫之 so 名稱,右邊表示由 Linux 的共享庫系統找到的對應的共享庫在文件系統中的具體位置。默認情況下, /etc/ld.so.conf 文件中包含有默認的共享庫搜索路徑。

ldd

查看其依賴的共享庫文件。

知識點:

1、如果使用 ldd 命令時沒有找到對應的共享庫文件和其具體位置,可能是兩種情況引起的:

共享庫沒有安裝在該系統中;

共享庫保存在 /etc/ld.so.conf 文件列出的搜索路徑之外的位置。

通常情況下,許多開放源代碼的程序或函數庫都會默認將自己安裝到 /usr/local 目錄下的相應位置(如:/usr/local/bin 或 /usr/local/lib),以便與系統自身的程序或函數庫相區別。而許多 Linux 系統的 /etc/ld.so.conf 文件中默認又不包含 /usr/local/lib。因此,往往會出現已經安裝瞭共享庫,但是卻無法找到共享庫的情況。具體解決辦法如下:

檢查 /etc/ld.so.conf 文件,如果其中缺少 /usr/local/lib 目錄,就添加進去;註意:在修改瞭 /etc/ld.so.conf文件或者在系統中安裝瞭新的函數庫之後,需要運行一個命令:ldconfig ,該命令用來刷新系統的共享庫緩存,即 /etc/ld.so.cache 文件。為瞭減少共享庫系統的庫搜索時間,共享庫系統維護瞭一個共享庫 so 名稱的緩存文件/etc/ld.so.cache。因此,在安裝新的共享庫之後,一定要運行 ldconfig 刷新該緩存。

2、使用nm命令也可以獲取庫函數的信息;nm命令可以列出一個函數庫文件中的符號表,它對靜態的庫函數和共享的庫函數都能起作用。

odbc驅動程序啟動不瞭,需要修改start命令裡面的export LD_LIBRARY_PATH後面加上路徑,具體文件夾後面加冒號例如:

export LD_LIBRARY_PATH=/usr/local/lib/:.

並需要建立Consumer裡面調用libodbc.so.2的軟連接

libodbc.so.2 -> /usr/local/lib/libodbc.so.1

赞(0)