问题描述:
sudo ldd 应用程序时 显示缺少库。
分析:
如果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文件,如果其中缺少自己编译的被依赖的库的目录,就添加进去;
注意:在修改了/etc/ld.so.conf 文件或者在系统中安装了新的函数库之后,需要运行命令 ldconfig ,该命令用来刷新系统的共享库缓存,即 /etc/ld.so.cache 文件。为了减少共享库系统的库搜索时间,共享库系统维护了一个共享库so名称的缓存文件 /etc/ld.so.cache 。 因此,在安装新的共享库之后,一定要运行 ldconfig刷新该缓存。即:
第一步:
sudo vim /etc/ld.so.conf //打开后 将缺少的被依赖的库的目录添加进去
第二步:
sudo /sbin/ldconfig //使上述修改生效。
第三步:
sudo ldd camerademo //查看应用程序依赖库
=》所有依赖库均已找到 ok。
注意:
有一点需要说明,添加到/etc/ld.so.conf文件中的搜索路径必须是so文件的直接父路径,不能是祖先路径。貌似ldd不会便利某路径下的子目录。
参考&&致谢: