linux 动态库不能识别?

justkk 2013-06-22 09:53:54
启动ntp服务时发现一个问题:
Starting network time protocol daemon (NTPD)/usr/sbin/ntpd: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
startproc: exit status of parent of /usr/sbin/ntpd: 127

查看依赖的动态库,输出结果中包含libz.so.1的具体路径
ldd /usr/sbin/ntpd
libz.so.1 => /usr/local/lib/libz.so.1 (0x00007f640b7c1000)

查看库文件是否存在
ls -l /usr/local/lib/libz.so.1
lrwxrwxrwx 1 root root 13 Jun 21 13:43 /usr/local/lib/libz.so.1 -> libz.so.1.2.7
ls -l /usr/local/lib/libz.so.1.2.7
-rwxr-xr-x 1 root root 101184 Jun 21 11:45 /usr/local/lib/libz.so.1.2.7

库文件是存在的,不知道为什么找不到

尝试把libz.so.1.2.7拷贝到/lib64目录并同样创建符号链接后,ntpd可以成功启动。

查看环境变量设置
LD_LIBRARY_PATH=/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/local/lib

是同时包含/lib64与/usr/local/lib这两个路径的。
为什么不能识别/usr/local/lib目录下的库文件,却能识别/lib64目录下的相同的库文件呢??
...全文
484 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
LinuxMan 2013-07-01
  • 打赏
  • 举报
回复
引用 12 楼 justkk 的回复:
沉了,不纠结了,搁置
这为什么要沉? 同三楼,做符号连接libz.so去掉后缀.1 路径我认为应该是按顺序查找的。
justkk 2013-07-01
  • 打赏
  • 举报
回复
沉了,不纠结了,搁置
justkk 2013-06-24
  • 打赏
  • 举报
回复
补充一下,程序的启动方式是
service ntp start
justkk 2013-06-24
  • 打赏
  • 举报
回复
但是库文件本身是一样的,只是拷贝了一下
zhxianbin 2013-06-24
  • 打赏
  • 举报
回复
貌似和 64位、32位有关,只找 64位的?
jufeng2309 2013-06-24
  • 打赏
  • 举报
回复
1、需要确认是否root权限运行该应用? 2、LD_LIBRARY_PATH=/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/local/lib 针对64位操作系统,默认会找64的lib。 如果没用到/usr/local/lib64:就直接设置:/usr/local/lib 如果两者都用到的话,建议加到64下面去。或者32位的加一个软连。
justkk 2013-06-23
  • 打赏
  • 举报
回复
justkk 2013-06-22
  • 打赏
  • 举报
回复
cat /etc/ld.so.conf
/usr/X11R6/lib64/Xaw3d
/usr/X11R6/lib64
/usr/lib64/Xaw3d
/usr/X11R6/lib/Xaw3d
/usr/X11R6/lib
/usr/lib/Xaw3d
/usr/x86_64-suse-linux/lib
/usr/local/lib
/opt/kde3/lib
/usr/local/lib64
/opt/kde3/lib64
/lib64
/lib
/usr/lib64
/usr/lib
include /etc/ld.so.conf.d/*.conf

这两个目录都是存在的。
按理说LD_LIBRARY_PATH也是可以控制动态库的查找路径的
zhxianbin 2013-06-22
  • 打赏
  • 举报
回复
需不需要加入 /etc/ld.so.conf ?
zhxianbin 2013-06-22
  • 打赏
  • 举报
回复
这个问题很诡异了
justkk 2013-06-22
  • 打赏
  • 举报
回复
4楼描述有误。修正一下

问题提炼一下:
1、环境变量LD_LIBRARY_PATH中同时包含/lib64、/usr/local/lib这两个目录
2、/etc/ld.so.conf中同时包含/lib64、/usr/local/lib这两个目录
3、如果删除/lib64目录下的libz.so.1、libz.so.1.2.7,程序将运行失败,提示 libz.so.1: cannot open shared object file: No such file or directory
而此时/usr/local/lib目录下是存在libz.so.1、libz.so.1.2.7这两个文件的,其中前者是后者的符号链接。
执行ldd命令也能看到找到了/usr/local/lib/libz.so.1
ldd /usr/sbin/ntpd
libz.so.1 => /usr/local/lib/libz.so.1 (0x00007f640b7c1000)
4、拷贝一份到/lib64并创建连接,程序成功运行
cp /usr/local/lib/libz.so.1.2.7 /lib64
cd /lib64
ln -s libz.so.1.2.7 libz.so.1

这样是不是说明库文件本身没有问题,何解?
justkk 2013-06-22
  • 打赏
  • 举报
回复
但是提示的是libz.so.1没有找到。
-----------------------------------------

问题提炼一下:
1、环境变量LD_LIBRARY_PATH中同时包含/lib64、/usr/local/lib这两个目录
2、/etc/ld.so.conf中同时包含/lib64、/usr/local/lib这两个目录
3、如果删除/lib64目录下的/usr/local/lib/libz.so.1、/usr/local/lib/libz.so.1.2.7,程序将运行失败,提示 libz.so.1: cannot open shared object file: No such file or directory
4、拷贝一份到/lib64并创建连接,程序成功运行
cp /usr/local/lib/libz.so.1.2.7 /lib64
cd /lib64
ln -s libz.so.1.2.7 libz.so.1

这样是不是说明库文件本身没有问题,何解?
linux_c_cpp 2013-06-22
  • 打赏
  • 举报
回复
程序运行加载库的时候需要一个不带后缀的库文件libz.so吧, 试试再创建一个软链接ln -sf libz.so.1 libz.so

19,619

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧