linux下.so not found,LINUX LIBXXX.SO NOT FOUND

在Linux干活,不管是运维人员操作TOMCAT,APACHE,ZUUL, MQ,KAFAL等偶尔会遇到libxxxx.so 没有找到,这里的xxx是代词,而且给出了目录名字。

既是你找到了它,并把它拷贝到当前目录下也还是无效,真的会被气。。。

这是小仙在建行,修改验证脚本时遇到的。建行会把开发人员上线的SQL打包。我们解包后,到处修改参数,最后执行updatedb.sh就可以,然后就是各种备份,查找日志,一翻没有必要的重复操作。而且不同版本,涉及不同的数据库,经常晚上加班,多个版本轮回测,一不小心有一处没改回参数,就把数据库给搞乱了。我来了后不断专研updatedb.sh这个脚本,发现脚本套脚本,连套5层。数据库配置有加密的,需要OPENSSLTOOL工具进行解压。就是这工具报了liblnsth.so not found. 整了老久,没整好,放弃了!

最近写OCCI接口的C++程序,程序写好了,发布到别的ORACLE系统下。发现还是报错liblnsth.so not found. 得这坑绕不开!得盘它!

.SO 是什么鬼?

据说它是动态链接库,还叫共享库。动态链接库,小仙以前使用BCB工具开发WINDOWS桌面应用,经常看到动态链接库XXX.DLL。看来跟WINDOWS的DLL是一回事。可是WINDOWX下的.EXE如果找不到,只要你拷贝程序当前目录下,它就能调用了。

那么在LINUX 是如何寻找SO的呢?

1 一般 Linux 系统把 /lib/usr/lib,/usr/local/lib 作为默认的库搜索路径,所以使用这几个目录中的链接库文件可直接被搜索到。

2 修改/etc/so.ld.conf (这个需要ROOT权限,这次不讲它)

3 修改环境变量,在其中添加自己的路径

在环境变量中添加

动态链接库搜索路径:

export LD_LIBRARY_PATH=XXX:$LD_LIBRARY_PATH

export LD_LIBRARY_PATH=$(pwd) #指在当前脚本或程序中找

静态链接库搜索路径:

export LIBRARY_PATH=XXX:$LIBRARY_PATH

可以在/etc/profile中完成(对所有用户生效),也可以在用户home目录下的.bashrc或.bash_profile中添加(针对某个用户生效),修改完后重新登录即生效。

如何知道一个可执行程序依赖哪些库 ?

ldd命令可以查看一个可执行程序依赖的共享库,

例如# ldd /bin/lnlibc.so.6

=> /lib/libc.so.6 (0×40021000)/lib/ld-linux.so.2

=> /lib/ld- linux.so.2 (0×40000000)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值