Linux 动态库相关问题

今天在Ubuntu上通过源码安装程序,发现运行时提示找不到.so文件,在计算机上查找发现该so文件在/usr/local/lib目录下,完全没有任何问题。上网上搜了一下,发现这个帖子。
谈谈Linux下动态库查找路径的问题

摘录如下

问题2:程序运行时出现libxxx.so.y => not found
这种情况,在我以前的博文“Linux系统下动态库和静态库那点事儿”里已经提到一部分,这里就把它补充完整。在那篇博文里,我用的配置文件或者“ldconfig 动态库所在路径”的方式解决的,也是99%的场合下的解决办法,那是针对有root权限的用户的解决办法。没有root权限运行软件时,Linux也为我们提供了一个名为LD_LIBRARY_PATH的环境变量来解决运行时动态库查找路径的解决方案。同样地,由这个环境变量所指定的路径会被装载器/lib/ld-2.12.so优先查找,然后才是动态库库缓存文件/etc/ld.so.cache,风采瞬间就被LD_LIBRARY_PATH给抢完了,/etc/ld.so.cache表示很不高兴。针对LD_LIBRARY_PATH环境变量这种情况,绝对是临时不能再临时解决方案了,如果只是测试用,用export像解决PKG_CONFIG_PATH一样的方式干净利索就行了,千万不要在实际生产上线的运维环境里把“export LD_LIBRARY_PATH=…” 添加到.bash_profile或者/etc/profile里,不然到时候悔得你肠子都绿了不可。

查看源码发现.pc文件没有问题,并且看似一切正常,最后grep lib***.so -r /etc/ld.so.cache未发现该符号。
最后sudo ldconfig更新了ld.so.cache文件,立马见效。

linux下so动态库一些不为人知的秘密

发表评论

电子邮件地址不会被公开。 必填项已用*标注