首页 > 代码库 > 记一起动态库加载错误问题排查过程

记一起动态库加载错误问题排查过程

我们的服务器软件在一台新机器上启动的时候报错:

error while loading shared libraries: libtcmalloc_mininal.so.4 No such file or directory

1,首先找找动态库libtcmalloc是否在新机器上

libtcmalloc这个动态库在目录/usr/local/lib下面,再查看/etc/ld.so.conf/gperftools.conf,它已经把目录/usr/local/lib加入到动态库搜索路径中了,为什么还会找不到动态库的错误呢?手动将/usr/local/lib加入到环境变量LD_LIBRARY_PATH中,然后再启动服务器软件,依然报上面的错误。

2,用ldd查看可执行文件的动态链接信息

ldd /usr/bin/xxx      ...      libtcmalloc_minimal.so.4 => /usr/local/lib/libtcmalloc_minimal.so.4 (0x00007f502b0b9000)      ...

 可以看到是可以找到动态链接库的。

3,因为可执行文件xxx在打包的时候依赖可gperftools,所以有可能是安装xxx的时候没有建立与gperftools的依赖关系。

这种情况下,只能手动卸载gperftools和xxx,然后安装xxx,让xxx自动按照依赖安装gperftoos。

4,卸载xxx成功,然后用yum卸载gperftools的时候,显示gperftools已经卸载成功,但是用rpm -ql gperftools依然能看到gperftools在系统中。猜测gperftools不是用yum安装的,遂用rpm -e gperftools卸载,这时报错:

 hwcap index 0 already defined as nosegneg

 在http://blog.chinaunix.net/uid-24830931-id-3467340.html 这里有个解决方法,作者提到ldconfig的时候也遇到过这样的问题

5,查看我机器上面的配置 /etc/ld.so.conf.d/*.conf中的一些内核配置,的确发现有的配置是hwcap 0 nosegneg,另外一些的配置是hwcap 1 nosegneg。

将这些配置改成一致的hwcap 1 nosegneg。

6,然后再用rpm -e gperftools卸载gperftools。

7,用yum安装服务器软件,它会自动安装依赖的gperftools。

8,启动服务器软件,成功。

 

记一起动态库加载错误问题排查过程