記一起動態庫加載錯誤問題排查過程


我們的服務器軟件在一台新機器上啟動的時候報錯:

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,啟動服務器軟件,成功。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM