處理動態連結庫報錯的問題

lirenquan發表於2010-11-29
今天,在起EMC程式一直啟不起程式,而是總部的研發人員要求這邊的維護人員把這個程式殺掉,災難由此而生。
啟動程式的命令為:
nohup ./emcAnalyse &
可以一直啟不起來,啟動起後,就報錯:
./emcAnalyse: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory
顯然,是動態連結庫找不到。
於是以root使用者,在根目錄下查詢:
find / -name *libstdc++* -print
找到的結果是在/usr/lib庫(其實是/usr/lib64目錄下也有)下找到了檔案
[root@mdw lib]# ls -l *libstdc*
lrwxrwxrwx 1 root root 18 07-15 12:30 libstdc++.so.6 -> libstdc++.so.6.0.8
-rwxr-xr-x 1 root root 936908 2010-03-31 libstdc++.so.6.0.8
看起來,是因為libstdc++有了升級,導致5升到了6,嘗試用ln -s libstdc++.so.5 libstdc++.so.6.0.8
程式報錯變成
./emcAnalyse: error while loading shared libraries: libstdc++.so.5: wrong ELF class: ELFCLASS32
已經很確定是連結檔案升級導致的,在網上查了下,也找下了類似的問題:
“今天在安裝sjsas-9_1_01-mysql-linux.bin時提示這個共享庫找不到,錯誤資訊為:error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory在/usr/lib下面發現有 /usr/lib/libstdc++.so.6.0.3於是執行 ln -s /usr/lib/libstdc++.so.6.0.3 /usr/lib/libstdc++.so.5 建立一個符合連線,這個錯誤資訊沒有了。但是又出現錯誤資訊:undefined symbol: _ZNSt24__default_alloc_templateILb1ELi0EE12_S_free_listE看來不行。還是刪除了連線: rm /usr/lib/libstdc++.so.5然後下載:http://mirror.centos.org/centos/4/os/i386/CentOS/RPMS/compat-libstdc++-33-3.2.3-47.3.i386.rpm再安裝rpm -ivh compat-libstdc++-33-3.2.3-47.3.i386"
這位老兄遇到的問題基本與我的一致,照著它的方法把64位的這個包下載下來,然後安裝好,最後命令確認包是否安裝好:
root@mdw tools]# rpm -ivh compat-libstdc++-33-3.2.3-47.3.x86_64.rpm
warning: compat-libstdc++-33-3.2.3-47.3.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 443e1821
Preparing... ########################################### [100%]
1:compat-libstdc++-33 ########################################### [100%]
[root@mdw tools]# rpm -qa | grep libstdc
libstdc++-4.1.2-48.el5
libstdc++-devel-4.1.2-48.el5
libstdc++-4.1.2-48.el5
compat-libstdc++-33-3.2.3-47.3
再用命令找到安裝目錄:
Usage: find [-H] [-L] [-P] [path...] [expression]
[root@mdw lib]# find / -name "*libstdc++.so*" -print
/home/oracle/ora10/lib32/stubs/libstdc++.so
/usr/lib64/libstdc++.so.5.0.7
/usr/lib64/libstdc++.so.6.0.8
/usr/lib64/libstdc++.so.5
/usr/lib64/libstdc++.so.6
/usr/local/greenplum-db-3.3.6.1/lib/libstdc++.so.6.0.8
/usr/local/greenplum-db-3.3.6.1/lib/libstdc++.so.6
/usr/lib/gcc/x86_64-redhat-linux/4.1.1/libstdc++.so
/usr/lib/gcc/x86_64-redhat-linux/4.1.1/32/libstdc++.so
/usr/lib/libstdc++.so.6.0.8
/usr/lib/libstdc++.so.6
顯然,這個目錄是在/usr/lib64目錄下(之前是不是目錄沒注意呀),檢視了下環境變數LD_LIBRARY_PATH,果然是沒有/usr/lib64,於是,在後面追加:/usr/lib64,再啟動程式,果然不再報錯,成功萬歲!
[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12350275/viewspace-1042298/,如需轉載,請註明出處,否則將追究法律責任。

相關文章