libxl-3.6.5 在RHEL5.4上无法编译、运行的解决办法

libxl-3.6.5 在RHEL5.4上无法编译的解决办法


libxl库在linux下编译出现错误,错误如下:

C++编译报错:

libxl-3.6.5 在RHEL5.4上无法编译、运行的解决办法_第1张图片


C编译报错:



没错,就是GLIBCXX3.4.9 / GLIBCXX3.4.10 / GLIBCXX3.4.11 等一些列的错误

lib/libxl.so: undefined reference to 'std::basic_ostream<char,std::char_traits<char> >& std::__ostream_insert<char,std::char_traits<char> ><std::basic_ostream<char,std::char_traits<char> >&,char const*,int)@GLIBCXX_3.4.9'


从报错可以看出,可能是你的linux系统上的libstdc++.so的版本与libxl.so所需要使用的libstdc++.so的版本不同导致的。

查看系统libstdc++.so库版本,果然较低。



【解决办法】

从官网  http://pkgs.org/download/libstdc++.so.6  下载如下安装包,使用命令安装,安装完之后C或C++编译均通过。

yum install libstdc++-4.4.7-16.el6.i686.rpm

也可在这里下载直接替换 http://download.csdn.net/detail/aflyeaglenku/9421395

当然,使用那个版本的libstdc++.so库与你的linux系统有关。我使用的是RHEL5.4,gcc / g++等都为变动过。还有,对于库的选择,也可以参考下面博文的方法。

libxl-3.6.5 在RHEL5.4上无法编译、运行的解决办法_第2张图片






libxl-3.6.5 在RHEL5.4上编译通过、但无法运行的解决办法

继上一博客,你可能已经能够编译通过了,但是无法运行。出现如下错误:

error while loading shared libraries: /usr/lib/libstdc++.so.6: ELF file OS ABI invalid



不要担心,这是你下载的rpm包内的libstdc++.so.6.0.13并没有生效,即并没有更新升级成功。下面介绍

【解决办法】

(第1步)先删除libstdc++.so.6

[root@localhost ~]# rm /usr/lib/libstdc++.so.6
(第2步)然后将下载的libstdc++.so.6.0.13复制到/usr/lib/目录下面
(第3步)再建立符号链接
[root@localhost ~]# ln -s /usr/lib/libstdc++.so.6.0.13 /usr/lib/libstdc++.so.6
(第4步)检验是否替换完成。出现如下图,说明更新libstdc++.so.6.0.13成功。
[root@localhost ~]#  strings /usr/lib/libstdc++.so.6|grep GLIBCXX

libxl-3.6.5 在RHEL5.4上无法编译、运行的解决办法_第3张图片


出现 ELF file OS ABI invalid 的原因

我们使用readelf 命令来查看一下两个so库的 ELF 格式

libxl-3.6.5 在RHEL5.4上无法编译、运行的解决办法_第4张图片

libxl-3.6.5 在RHEL5.4上无法编译、运行的解决办法_第5张图片


看出差别来了吧!libxl.so的ABI 格式是 System V 的,因此我们需要使用System V 格式的libstdc++.so才能够运行libxl.so的demo程序。



你可能感兴趣的:(linux,libstdc++.so.6)