redhat 6.4 升级 gcc g++ 到4.8.5

  • Centos7.2环境下编译的动态链接库 放到redhat6.8 报

/lib64/libc.so.6: version `GLIBC_2.14' not found
/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found
/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found

解决办法升级 gcc/g++ glibc 为centos7.2环境版本

  • redhat6.4 gcc/g++、glibc 版本
[root@node80 ~]# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 6.4 (Santiago)
[root@node80 ~]# g++ -v
使用内建 specs。
目标:x86_64-redhat-linux
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzill
a --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux线程模型:posix
gcc 版本 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) 
[root@node80 ~]#

[root@node80 ~]# strings /lib64/libc.so.6 | grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE
[root@node80 ~]#  strings /usr/lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
[root@node80 ~]#
  • 解决’GLIBC_2.14’ not found
  • 注意 解压的glic-2.14.tar.gz源码和编译时定义的目录不要放在一起
查看shell history 

    tar -zxvf glibc-2.14.tar.gz 
  696  cd glibc-2.14
  697  ll
  698  mkdir build
  699  cd build/
  700  ../configure --prefix=/opt/glibc-2.14
  -j32 是多线程编译 看你自己机器核数 j后面一般是4的倍数
  701  make -j32
  702  make install
  err: ld.so.conf not find
  703  find / -name "ld.so.conf"
  704  cp /etc/ld.so.conf /opt/glibc-2.14/etc/
  705  find / -name "ld.so.conf"
  706  make install

升级gcc/g++ 4.4.7 到4.8.5

wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.gz
tar -zxvf gcc-4.8.2.tar.gz
cd gcc-4.8.5
./contrib/download_prerequisites

然后把 gcc-4.8.5(tar -zcvf gcc-4.8.2.tar.gz gcc-4.8.5/ ) 打包后传到需要升级的机器
tar -zxvf gcc-4.8.2.tar.gz
cd gcc-4.8.5
[root@node80 gcc-4.8.5]# ./configure --prefix=/usr/local --enable-checking=release --enable-languages=c,c++  --disable-multilib
make 时间比较长。。。。 -j32 是多线程 看你自己机器核数 j后面一般是4的倍数
[root@node80 gcc-4.8.5]# make -j32

  • 检查三个链接文件是否存在并链接到/usr/local/lib64/libstdc++.so.6.0.19
[root@node80 gcc-4.8.5]# ll /usr/lib64/libstdc++.so.6
lrwxrwxrwx. 1 root root 19 Oct 26  2018 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.13
[root@node80 gcc-4.8.5]# ll /usr/local/lib64/libstdc++.so.6
lrwxrwxrwx. 1 root root 19 Sep 29 15:00 /usr/local/lib64/libstdc++.so.6 -> libstdc++.so.6.0.19
[root@node80 gcc-4.8.5]# ll /usr/local/lib64/libstdc++.so
lrwxrwxrwx. 1 root root 19 Sep 29 15:00 /usr/local/lib64/libstdc++.so -> libstdc++.so.6.0.19
[root@node80 gcc-4.8.5]# 

没有连接到的删除重新连接如下:
[root@node80 gcc-4.8.5]# rm -r /usr/lib64/libstdc++.so.6
rm: remove symbolic link `/usr/lib64/libstdc++.so.6'? y
[root@node80 gcc-4.8.5]#  ln -s /usr/local/lib64/libstdc++.so.6.0.19  /usr/lib64/libstdc++.so.6
[root@node80 gcc-4.8.5]# ll  /usr/lib64/libstdc++.so.6
lrwxrwxrwx. 1 root root 36 Sep 29 15:09 /usr/lib64/libstdc++.so.6 -> /usr/local/lib64/libstdc++.so.6.0.19

  • 修改环境变量
[root@node80 gcc-4.8.5]# vim /etc/profile
export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH

[root@node80 gcc-4.8.5]# source /etc/profile
[root@node80 gcc-4.8.5]# g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.5/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ./configure --prefix=/usr/local --enable-checking=release --enable-languages=c,c++ --disable-multilib
Thread model: posix
gcc version 4.8.5 (GCC) 

-查看升级后的gcc/g++ 版本

[root@node80 gcc-4.8.5]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.5/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ./configure --prefix=/usr/local --enable-checking=release --enable-languages=c,c++ --disable-multilib
Thread model: posix
gcc version 4.8.5 (GCC) 
[root@node80 gcc-4.8.5]# 
  • glibc 连接到2.14
[root@node80 gcc-4.8.5]# ll /lib64/libc.so.6
lrwxrwxrwx. 1 root root 12 Oct 26  2018 /lib64/libc.so.6 -> libc-2.12.so
[root@node80 gcc-4.8.5]# rm -rf /lib64/libc.so.6
[root@node80 gcc-4.8.5]# sln /opt/glibc-2.14/lib/libc-2.14.so /lib64/libc.so.6
[root@node80 gcc-4.8.5]#

[root@node80 lib]# strings /lib64/libc.so.6 | grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_PRIVATE
[root@node80 lib]#  strings /usr/lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
[root@node80 lib]#
[root@node80 opt]# vi /etc/sysconfig/i18n
LC_ALL=C
export LC_ALL
[root@node80 opt]# 
[root@node80 opt]# 
[root@node80 opt]# source /etc/sysconfig/i18n
[root@node80 opt]#

版权声明:本文为weixin_39279921原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。