为何ldd检测到已存在的共享库显示‘not found’?
动态库存在但ldd检测找不到的原因及解决办法
动态库搜索路径未配置
系统默认仅在/lib、/usr/lib及/etc/ld.so.conf配置的目录中搜索动态库,你的库所在的/home/morpho/lib64大概率未加入搜索路径:- 临时修复:运行Java程序前执行
export LD_LIBRARY_PATH=/home/morpho/lib64:$LD_LIBRARY_PATH,再启动程序。 - 永久修复:将
/home/morpho/lib64追加到/etc/ld.so.conf文件末尾,执行sudo ldconfig重建缓存。
- 临时修复:运行Java程序前执行
库的SONAME或依赖声明异常
部分动态库编译时未正确设置SONAME(共享对象名称),或依赖项使用了非标准命名:- 查看
libMorphoSmartSDKJavaWrapper.so.6.45.0.0的依赖声明:readelf -d /home/morpho/lib64/libMorphoSmartSDKJavaWrapper.so.6.45.0.0 | grep NEEDED,确认是否确实依赖libmorphosdk.so.6。 - 检查
libmorphosdk.so.6的SONAME:readelf -d /home/morpho/lib64/libmorphosdk.so.6 | grep SONAME,若SONAME与文件名不符,可创建对应软链接(如ln -s /home/morpho/lib64/libmorphosdk.so.6 /home/morpho/lib64/[SONAME值])。
- 查看
权限不足
确保运行Java程序的用户对/home/morpho/lib64目录及所有.so文件有可读权限:- 查看权限:
ls -l /home/morpho/lib64/ - 修复权限:
sudo chmod +r /home/morpho/lib64/*.so,并执行sudo chmod +x /home/morpho/lib64/
- 查看权限:
架构不兼容
若系统与库的64位/32位架构不匹配,ldd会无法识别:- 查看库架构:
file /home/morpho/lib64/libmorphosdk.so.6 - 查看Java架构:
file $(which java)
确保两者架构一致,若不一致需更换对应架构的库或Java环境。
- 查看库架构:
内容的提问来源于stack exchange,提问作者Noor
相关产品推荐
相关产品推荐

