我有一個共享對象(libxyz.so)。鑑於LD_LIBRARY_PATH,如何才能找到這個共享對象的確切位置?如果我有一個依賴於這個庫的二進制文件,我會使用ldd。LD_LIBRARY_PATH:如何找到共享對象
這就是爲什麼我問: 我有一個cgi腳本,它使用LD_LIBRARY_PATH設置爲說VALUE1時工作。當路徑設置爲VALUE2時,它不起作用。我想找到如由VALUE1路徑指定的庫的確切位置(注意VALUE1有近20多個不同的位置)
平臺:Linux
我有一個共享對象(libxyz.so)。鑑於LD_LIBRARY_PATH,如何才能找到這個共享對象的確切位置?如果我有一個依賴於這個庫的二進制文件,我會使用ldd。LD_LIBRARY_PATH:如何找到共享對象
這就是爲什麼我問: 我有一個cgi腳本,它使用LD_LIBRARY_PATH設置爲說VALUE1時工作。當路徑設置爲VALUE2時,它不起作用。我想找到如由VALUE1路徑指定的庫的確切位置(注意VALUE1有近20多個不同的位置)
平臺:Linux
在一個文件將這個:
#!/bin/bash
IFS=:
for p in ${LD_LIBRARY_PATH}; do
if [ -e ${p}/libxyz.so ]; then
echo ${p}
fi
done
並運行它。
睡覺(30);在你的cgi中,從瀏覽器啓動它,然後查看/ proc/$(pidof mycgi)/ maps來獲取程序使用的實際庫。
您也可以使用ldd。要做到這一點,你會:
export LD_LIBRARY_PATH=VALUE1
)ldd /path/to/prog | grep libxyz.so
是的,我可以做到這一點,但這是一個CGI腳本,並且ldd不能在腳本上工作 – CuriousDawg 2010-04-07 01:11:54
@CuriousDawg - 如果是腳本,則在解釋器上運行ldd(即'#!'之後的程序) – 2010-04-07 03:56:43
感謝您的答覆。我只是想知道是否有一個現有的Linux工具。另外,我注意到lib文件夾中有一些文件具有其他lib文件夾的路徑名 - 所以這也需要遞歸地查看那些目錄 – CuriousDawg 2010-04-07 00:33:30
哦順便說一句,這不工作沒有首先分割使用的路徑:分隔符 – CuriousDawg 2010-04-07 00:41:13
@CuriousDawg - 做你完全按照我寫的那樣來嘗試這個例子嗎? 'IFS =:'告訴bash要處理:作爲分隔符(或bash中的字段分隔符)。 – 2010-04-07 00:44:17