Linux系统手动升级gcc
来源:互联网 发布:乐高ev3编程软件安卓版 编辑:程序博客网 时间:2024/04/30 01:28
我们有些应用在编译中需要高版本的gcc和g++,但是linux系统每个版本一般都对应一个gcc版本,要想升级只能手动升级。
常规安装
1、下载gcc源码
这里以5.2版本为例,下载地址http://ftp.gnu.org/gnu/gcc
2、将下载的gcc源码解压到/usr/local文件夹
$ tar -jxf gcc-5.2.0.tar.bz2 -C /usr/local/$ cd /usr/local/gcc-5.2.0$ ./contrib/download_prerequisites
安装gcc需要先安装gmp、isl、mpc、mpfr,以上命令会自动下载这些安装包,在编译gcc时一起编译安装。
3、安装
$ mkdir build && cd build$ ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib$ make -j4$ make install
这个过程比较耗时,跟计算机的配置有关,快的话40分钟或一个小时,慢的话三四个小时。
离线安装
对于有些需要安装在内网服务器,不能联网的机器,只能采用离线安装,离线安装同样按照以上方法下载gcc源码和解压,只是gmp、isl、mpc、mpfr这些包需要提前下载好。有两种方法可以进行:
1、手动下载安装包并创建软连接
- 查看依赖包的版本
$ vim ./contrib/download_prerequisites
在以上文件中查看需要下载的依赖包的版本,这里我们需要下载 gmp-4.3.2.tar.bz2、isl-0.15.tar.bz2、mpc-0.8.1.tar.gz、mpfr-2.4.2.tar.bz2,注意,依赖包一定要是指定版本的,否则会出问题。下载好依赖包,直接解压到/usr/local/gcc-6.1.0/ 目录,然后设置软链接。
- 设置软连接
# ln -sf gmp-4.3.2 gmp# ln -sf isl-0.15 isl# ln -sf mpc-0.8.1 mpc# ln -sf mpfr-2.4.2 mpfr
- 编译安装
$ mkdir build && cd build$ ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib$ make -j4$ make install
2、找一个能联网的linux机器,自动下载安装包
如果有其他可以上网的linux机器,可以在这台机器上按照“常规安装”的前两步联网自动下载安装包,自动创建软连接。然后将gcc-5.2.0文件夹整体打包到离线服务器,直接进行第三步编译安装。
更新glibcxx
安装完gcc,通过gcc -v查看发现gcc版本已经更新,但是运行某些程序还是会出现类似“/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found”的错误,这是因为安装gcc不会自动更新libstdc++共享库,这里需要手动替换一下。
1、查看动态库的版本
$ strings /usr/lib64/libstdc++.so.6 | grep GLIBCGLIBCXX_3.4GLIBCXX_3.4.1GLIBCXX_3.4.2GLIBCXX_3.4.3GLIBCXX_3.4.4GLIBCXX_3.4.5GLIBCXX_3.4.6GLIBCXX_3.4.7GLIBCXX_3.4.8GLIBCXX_3.4.9GLIBCXX_3.4.10GLIBCXX_3.4.11GLIBCXX_3.4.12GLIBCXX_3.4.13GLIBCXX_FORCE_NEWGLIBCXX_DEBUG_MESSAGE_LENGTH
2、搜索安装gcc时新版本的动态库的位置
# find / -name "libstdc++.so*"
按照以上方法安装生成的动态库一般位于/usr/local/lib64,我们将其移动到/usr/lib64文件夹并替换软连接就可以了
# cp /usr/local/lib64/libstdc++.so.6.0.21 /usr/lib64# cd /usr/lib64
删除原来的软连接
# rm -rf libstdc++.so.6
将默认软连接指向最新动态库
# ln -s libstdc++.so.6.0.21 libstdc++.so.6
至此动态库配置完成,运行strings命令重新检查动态库版本:
# strings /usr/lib64/libstdc++.so.6 | grep GLIBCGLIBCXX_3.4GLIBCXX_3.4.1GLIBCXX_3.4.2GLIBCXX_3.4.3GLIBCXX_3.4.4GLIBCXX_3.4.5GLIBCXX_3.4.6GLIBCXX_3.4.7GLIBCXX_3.4.8GLIBCXX_3.4.9GLIBCXX_3.4.10GLIBCXX_3.4.11GLIBCXX_3.4.12GLIBCXX_3.4.13GLIBCXX_3.4.14GLIBCXX_3.4.15GLIBCXX_3.4.16GLIBCXX_3.4.17GLIBCXX_3.4.18GLIBCXX_3.4.19GLIBCXX_3.4.20GLIBCXX_3.4.21GLIBC_2.3GLIBC_2.2.5GLIBC_2.3.2GLIBCXX_FORCE_NEWGLIBCXX_DEBUG_MESSAGE_LENGTH
- Linux系统手动升级gcc
- Linux离线(手动)升级GCC-4.8
- Linux(CentOS 6.5) 手动升级gcc到gcc-6.1.0
- 升级Linux系统中的gcc编译器
- linux 手动安装gcc
- Linux系统中arm-linux-gcc编译器升级
- linux升级gcc
- Linux升级gcc
- Linux升级安装GCC
- Linux升级gcc版本
- centos 手动升级系统内核
- Linux 下firefox手动升级
- linux:centos gcc 升级 gcc-4.8.1
- Linux | Ubuntu 升级 GCC 到 gcc-5.3
- Linux(ubuntu)+gcc/g++ 升级
- linux下升级GCC 4.8
- Linux升级安装GCC g++
- Linux升级安装GCC g++
- deepin/win10双系统deepin下其他盘带锁解决
- iOS XCode storyboard 设置控件三等分屏幕的约束添加
- android AlertDialog例子(恢复系统出厂设置)
- priority_queue practice
- 第一周编程作业--1求最大公约数和最小公倍数2排序并插入
- Linux系统手动升级gcc
- tensorflow笔记(一):流程,概念和简单代码注释
- 数字图像处理---行人检测
- python实现的分层随机抽样
- epoll的边缘触发(ET)和水平触发(LT)
- [转]spring cloud之熔断器 Hystrix 的原理与使用
- 再次配置深度学习环境
- Python之正则表达式
- 前端开发常用工具概念梳理