ITPub博客

首页 > 数据库 > Oracle > 处理动态链接库报错的问题

处理动态链接库报错的问题

原创 Oracle 作者:lirenquan 时间:2010-11-29 11:49:45 0 删除 编辑
今天,在起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/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
全部评论

注册时间:2010-12-24

  • 博文量
    24
  • 访问量
    109684