非 root 用户手动编译安装 GCC
我们知道,关于 GCC 在 CentOS 下通过 yum 安装默认版本号,CentOS 5 是 4.1.2;CentOS 6 是 4.4.7;CentOS 7 是 4.8.3。很多时候在编译安装软件都需要高版本的 GCC,否则就会报错。那么如何升级 GCC 的版本呢?
首先要确认升级到的 GCC 版本号。目前 GCC 的最新版已经到了 9.1(2019-05-03),而 CentOS 7 则依然使用其 4.8,所以基于兼容性考虑,可以选择升级到 4.8.5。GCC 官网:https://gcc.gnu.org。
需要注意,编译安装 GCC 内存不小于 1GB,Swap 不小于 1GB,硬盘最低不小于 10GB,否则极有可能会中途报错退出。编译安装完后,目录 gcc-4.8.5 将会有 5GB 之多。
1. 下载源码
$ wget ftp://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.gz
2. 下载依赖包
编译安装 GCC 需要依赖 mpc,mpfr,gmp,isl 包。前四个包是 GNU 软件,使用 GCC 源码里自带脚本可以轻松下载;最后一个 isl 不是 GNU 项目,需要我们手动去下载。
$ tar zxf gcc-4.8.5.tar.gz
$ cd gcc-4.8.5
$ ./contrib/download_prerequisites
--2019-06-06 16:18:09-- ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
=> “mpfr-2.4.2.tar.bz2”
Resolving gcc.gnu.org... 209.132.180.131
Connecting to gcc.gnu.org|209.132.180.131|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD (1) /pub/gcc/infrastructure ... done.
==> SIZE mpfr-2.4.2.tar.bz2 ... 1077886
==> PASV ... done. ==> RETR mpfr-2.4.2.tar.bz2 ... done.
Length: 1077886 (1.0M) (unauthoritative)
100%[=================================================================================>] 1,077,886 249K/s in 4.2s
2019-06-06 16:18:19 (249 KB/s) - “mpfr-2.4.2.tar.bz2” saved [1077886]
--2019-06-06 16:18:20-- ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
=> “gmp-4.3.2.tar.bz2”
Resolving gcc.gnu.org... 209.132.180.131
Connecting to gcc.gnu.org|209.132.180.131|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD (1) /pub/gcc/infrastructure ... done.
==> SIZE gmp-4.3.2.tar.bz2 ... 1897483
==> PASV ... done. ==> RETR gmp-4.3.2.tar.bz2 ... done.
Length: 1897483 (1.8M) (unauthoritative)
100%[=================================================================================>] 1,897,483 210K/s in 7.7s
2019-06-06 16:18:30 (239 KB/s) - “gmp-4.3.2.tar.bz2” saved [1897483]
--2019-06-06 16:18:31-- ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
=> “mpc-0.8.1.tar.gz”
Resolving gcc.gnu.org... 209.132.180.131
Connecting to gcc.gnu.org|209.132.180.131|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD (1) /pub/gcc/infrastructure ... done.
==> SIZE mpc-0.8.1.tar.gz ... 544950
==> PASV ... done. ==> RETR mpc-0.8.1.tar.gz ... done.
Length: 544950 (532K) (unauthoritative)
100%[=================================================================================>] 544,950 286K/s in 1.9s
2019-06-06 16:18:35 (286 KB/s) - “mpc-0.8.1.tar.gz” saved [544950]
$ wget http://isl.gforge.inria.fr/isl-0.14.tar.gz
$ tar zvxf isl-0.14.tar.gz
$ ln -s lsl isl-0.14
在此脚本里可以看到依赖包的版本号依次是 mpc-0.8.1,mpfr-2.4.2,gmp-4.3.2;另外我们下载 isl-0.14。
3. 编译安装
为了避免在编译过程中,受原来系统自定义的一堆环境影响,建议先 unset 这些环境设置:
$ unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE
参考:《g++ 4.7.1 compilation error : conflicting types for 'strsignal'》
完整编译安装步骤如下:
$ mkdir gcc-build-4.8.5
$ cd gcc-build-4.8.5
$ unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE
$ ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib --prefix=/Bioinfo/SoftWare/gcc-4.8.5
$ make
$ make install
.....
----------------------------------------------------------------------
Libraries have been installed in:
/Bioinfo/SoftWare/gcc-4.8.5/lib/../lib64
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
......
如果需要重新 configure 或在 make 中途出错需要退出,最好把当前目录下的所有东西都删除干净。可以执行下面指令清空 编译目录下的相关文件,包括 makefile:
$ make distclean
4. 配置环境变量
GCC 安装完成后,需要包新安装的 gcc 添加到 PATH 个人相应的 LD_LIBRARY_PATH :
export PATH=/Bioinfo/SoftWare/gcc-4.8.5/bin:$PATH
export LD_LIBRARY_PATH=/Bioinfo/SoftWare/gcc-4.8.5/lib64:$LD_LIBRARY_PATH
如果不想把新装 GCC 添加到 ~/.bashrc 中的 PATH 和 LD_LIBRARY_PATH 让它永久起作用,但是在安装软件时又想使用新安装的高级版本的 GCC 来编译软件,可以:
在软件编译前先执行上面两个 export 语句,再执行后面的编译安装命令;
或者在软件编译安装时直接在编译参数中添加 gcc/g++ 和其动态库的路径就可以。
到这里新版本的 GCC 就已经安装完了,在下一篇文章中我们将会跟大家分享一下怎么使用新版本的 GCC 在 Linux 下源码编译安装最新版本的 R-3.6.0。
5. 参考资料
秋水逸冰,《在CentOS下编译安装GCC》,WorldPress Blog
Martin Drozdik, etc.,《How can I understand these dreadful errors when building gcc-4.8.2》, Stack Overflow
ljpwinxp,《Centos 6.9 编译安装gcc 4.8.5》,51CTO
代码日志,《c – 构建gcc-4.8.2时如何理解这些可怕的错误》, 个人博客
Benjamin Berhault, 《Build and Install the Last GCC on RHEL/CentOS 7》,Ben's Jekyll Blog
——The End——

本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
非 root 用户手动编译安装 GCC的更多相关文章
- CentOS手动编译安装gcc
最近尝试了fedora.ubuntu.mint.debian.opensuse等多种linux发行版,与CentOS比较之后还是感觉之前用的CentOS比较熟悉,比较习惯.现在CentOS的最新版本为 ...
- 非root用户Memcached repcached安装
安装memcached前先要确定系统是否安装了gcc: 1.解压安装包: tar -zxf memcached-1.2.8-repcached-2.2.tar.gz 2.编译: 系统应安装了libev ...
- 非root用户linux下安装FFTW
一.环境准备 确保g++可用本次编译是基于 GNU C++ 环境的,因此务必确定g++编译器可用,使用如下命令验证:命令:g++ --version出现类似如下输出则表明编译器可用: 二.下载FFTW ...
- 如何在Linux下手动编译安装gcc
如果可以通过apt来安装的话,尽量不要手工编译了,手工编译是最后的选择.用apt安装,只需要输入一条命令: sudo apt-get install gcc 手工编译的话,gcc和其他软件包存在如下的 ...
- CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动
CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动1.关于mysql?MySQL是一个关系型数据库管理 ...
- linux非root用户下安装软件,搭建生产环境
之前的用实验室的服务器,因为某些原因,使用的用户没有root权限.linux的非root用户很多软件无法安装,非常的不方便.我的方法是使用brew来代替系统的包管理工具.brew是最先用在mac上的包 ...
- [转载]Linux下非root用户如何安装软件
[转载]Linux下非root用户如何安装软件 来源:https://tlanyan.me/work-with-linux-without-root-permission/ 这是本人遇到的实际问题,之 ...
- Centos 非root用户安装rabbitmq
RabbitMQ是一个开源消息队列服务器,您可以使用它来构建您的消息传递应用程序.简单地说,您可以将来自一个应用程序的消息放入队列,并从来自相同应用程序或不同应用程序的队列中检索消息.您可以使用多种编 ...
- Linux 以非root用户安装zsh&配置on my zsh
此文章参考以下三篇文章,如有侵权请联系 Linux非root用户安装zsh, 并用oh-my-zsh进行配置 在没有sudo权限的Linux服务器下安装oh-my-zsh 不使用root权限安装zsh ...
- 非root用户安装科学计算包blas、lapack和FFTW
一.安装FFTW 1.下载安装包 下载地址:http://www.fftw.org/download.html 2.编译安装 tar -zxvf fftw-3.3.10.tar.gz cd fftw ...
随机推荐
- 10 个杀手级的 Python 自动化脚本
重复性任务总是耗时且无聊,想一想你想要一张一张地裁剪 100 张照片或 Fetch API.纠正拼写和语法等工作,所有这些任务都很耗时,为什么不自动化它们呢?在今天的文章中,我将与你分享 10 个 P ...
- 使用 ApplicationContextAware 定义 SpringContextHolder 类
需求:使用 @autowired注入一些对象,但发现不可以直接使用@Autowired,因为方法是static的,要使用该方法当前对象也必须是static,正常情况下@Autowired无法注入静态的 ...
- .NET周报 【3月第4期 2023-03-24】
国内文章 .NET应用系统的国际化-多语言翻译服务 https://www.cnblogs.com/tianqing/p/17232559.html 本文重点介绍了多语言翻译服务的设计和实现.文章描述 ...
- VUE中的$set与$delete的原理
我们上文说了,Vue 是通过 Object.defineProperty 和重写数组的原型方法来达到监控数据的目的.但是,在某些情况下,上面两种方案无法做到监控数据的变化,例如: (1):当我们给对象 ...
- SpringBoot中如何实现业务校验,这种方式才叫优雅!
大家好,我是飘渺. 在日常的接口开发中,为了保证接口的稳定安全,我们一般需要在接口逻辑中处理两种校验: 参数校验 业务规则校验 首先我们先看看参数校验. 参数校验 参数校验很好理解,比如登录的时候需要 ...
- vue 之 computed方法自带缓存踩坑1
使用场景:ant-vue 穿梭框使用 页面使用computed方法处理组织结构数据,退出页面时,对加载数据做了set null 操作,再次进入页面时,穿梭框只显示数据,无法做左右穿梭功能. 原因:co ...
- 迁移学习《Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Networks》
论文信息 论文标题:Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Ne ...
- 学习关于JavaScript常用的8大设计模式
JavaScript 常用的8大设计模式有 工厂模式:工厂模式是一种创建对象的模式,可以通过一个共同的接口创建不同类型的对象,隐藏了对象的创建过程. 单例模式:单例模式是一种只允许实例化一次的对象模式 ...
- [Tomcat/Java EE/Linux]Tomcat启动异常:StandardServer.await: create[localhost:8005]: java.net.BindException: 无法指定被请求的地址
1 问题背景 部门新成员小J在一台虚拟机(ip:192.168.191.96)内安装部署部门的数据治理产品(含: 20余个微服务模块 + 1套(用户)基础管理系统BMS). 小J启动BMS的Tomca ...
- SSM整合的所有配置(配置文件)
mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE co ...