https://blog.51cto.com/u_16213724/7325973
ldd命令
linux 下可以使用ldd查看可执行文件所需要的动态链接库(*.so)。
注:下文用so代替动态链接库文件。
// 举个例子
~$ ldd /bin/ls
linux-vdso.so.1 => (0x00007ffe06386000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007fd686b54000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd68678b000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fd68651a000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fd686316000)
/lib64/ld-linux-x86-64.so.2 (0x0000563411315000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd6860f9000)
问题
如果ldd命令没有找到对应的共享库文件和其具体位置?
可能是两种情况引起的:
1)共享库没有安装在该系统中;
2)共享库保存在/etc/ld.so.conf文件列出的搜索路径之外的位置。
通常情况下,许多开源代码的程序或函数库都会默认将在即安装到/usr/local目录下的相应位置(如:/usr/local/bin 或 /usr/local/lib)以便于系统自身的程序或函数库相区别。而许多linux系统的/ect/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刷新该缓存。
沒有留言:
張貼留言