LD_LIBRARY_PATH:如何找到共享对象
我有一个共享对象(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。要做到这一点,你会:
- 将LD_LIBRARY_PATH设置为它工作时的值(即
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