日期:2014-05-16  浏览次数:20635 次

linux 动态库不能识别?
启动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目录下的相同的库文件呢??

------解决方案--------------------
需不需要加入 /etc/ld.so.conf ?
------解决方案--------------------
程序运行加载库的时候需要一个不带后缀的库文件libz.so吧,
试试再创建一个软链接ln -sf libz.so.1 libz.so
------解决方案--------------------
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位的加一个软连。