我们的服务器软件在一台新机器上启动的时候报错:
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,启动服务器软件,成功。