您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
linux共享库so调试心得
发布时间:2018-03-08 16:16:24编辑:雪饮阅读()
当启动某个软件时提示xxx.so找不到(not found),此时可以使用ldd-debug来查看待启动软件中查找so库的检索详情,找到xxx.so的对应检索详情
在其检索详情中找到其检索的目录列表。
当找到xxx.so的对应检索目录列表后,就可以通过ln在目录列表中的任意一个目录中建立一个软链接,软链接指向你已经安装的xxx.so的路径即可
注意:有时候即便检索到了你的路径,你的路径中也的确存在xxx.so,但是仍旧提示xxx.so找不到,那么可能是因为位数的兼容问题,比如一个x86一个x86_64
实例:
centos7.3安装了php5.4,启动php-fpm时报错libpng12.so.0找不到。
解决:
用ld_debug排查检索so库的详情
LD_DEBUG=libs /www/server/php/54/sbin/php-fpm
找到如:
find library=libpng12.so.0 [0]; searching
30006: search path=/usr/local/curl/lib (RPATH from file /www/server/php/54/sbin/php-fpm)
30006: trying file=/usr/local/curl/lib/libpng12.so.0
30006: search path=/usr/local/lib:/usr/lib:tls/x86_64:tls:x86_64: (LD_LIBRARY_PATH)
30006: trying file=/usr/local/lib/libpng12.so.0
30006: trying file=/usr/lib/libpng12.so.0
30006: trying file=tls/x86_64/libpng12.so.0
30006: trying file=tls/libpng12.so.0
30006: trying file=x86_64/libpng12.so.0
30006: trying file=libpng12.so.0
30006: search cache=/etc/ld.so.cache
30006: search path=/lib64/tls/x86_64:/lib64/tls:/lib64/x86_64:/lib64:/usr/lib64/tls/x86_64:/usr/lib64/tls:/usr/lib64/x86_64:/usr/lib64 (system search path)
30006: trying file=/lib64/tls/x86_64/libpng12.so.0
30006: trying file=/lib64/tls/libpng12.so.0
30006: trying file=/lib64/x86_64/libpng12.so.0
30006: trying file=/lib64/libpng12.so.0
在这些search path中随便一个路径中建立一个libpng12.so.0的软链接,链接至libpng12.so.0的真实路径
ln -s /usr/lib/libpng12.so.0 /lib64/libpng12.so.0
然后再次ld_debug看看刚才的libpng12.so.0是否还是报错,结果仍旧报错。
发现lib64目录中有/lib64/libpng15.so软链接到同目录的libpng15.so.15.13.0。这样以来那么就是libpng12.so.0与本系统不兼容,那么直接重建软链接libpng12.so.0链接于libpng15.so.15.13.0即可
ln -s /lib64/libpng15.so.15.13.0 /lib64/libpng12.so.0
再次ld_debug发现已经没有了libpng12.so.0的报错信息了。
注意:ln命令的第一个路径参数是真实文件地址,第二个路径参数是快捷方式地址千万别弄混淆了
ldd:可以查看一个命令所依赖的动态库
如:ldd /www/server/php/54/sbin/php-fpm
关键字词:linux,库,so,ln,调试