我們的服務器軟件在一台新機器上啟動的時候報錯:
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,啟動服務器軟件,成功。
