文档章节

CentOS7编译安装GCC(完整版)

rose_willow
 rose_willow
发布于 2017/08/29 11:15
字数 969
阅读 67
收藏 0
点赞 0
评论 0

以GCC4.9.3版本为例

第一步

首先下载gcc源码包

wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.9.3/gcc-4.9.3.tar.bz2

第二步

将下载好的文件放在非root用户也有读权限的地方,例如 /home/myuser 或者 /usr/gcc-build/ 下面第四步我会讲为什么要这么做.

第三步

解压文件,做一些准备工作

tar xjvf gcc-4.9.3.tar.bz2

cd gcc-4.9.3

./contrib/download_prerequisites

安装gcc需要5个组件,download_prerequisites 的任务就是下载这些组件分别是:

cloog-0.18.1

gmp-4.3.2

isl-0.12.2

mpc-0.8.1

mpfr-2.4.2

如果遇到download_prerequisites里面的地址无法访问

推荐自行下载这些组件到目录gcc-4.9.3/,解压。

然后将download_prerequisites里面的wget全部注释掉,再执行 :

./contrib/download_prerequisites

1

做好上面的准备就可以configure了,建议另建一个目录来存放编译文件,默认安装目录是 /usr/local/ 可以使用 –prefix 修改自定义路径。

cd ..

mkdir gcc-4.9.3-build-temp

cd gcc-4.9.3-build-temp

../gcc-4.9.3/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

make -j4

make install

编译过程中报莫名其妙的错误,尝试使用root用户或者root权限编译

编译过程很慢,一切顺利的话,取决于你的配置40分钟-1个小时后再来看结果吧,我用公司的16核服务器编译了20分钟

第四步

在.bashrc中配置库文件和头文件路径

export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64/:$LD_LIBRARY_PATH

export C_INCLUDE_PATH=/usr/local/include/:$C_INCLUDE_PATH

export CPLUS_INCLUDE_PATH=/usr/local/include/:$CPLUS_INCLUDE_PATH

执行 gcc -v 可以看到下面的信息, 恭喜你成功一半了!

gcc -v

使用内建 specs。

COLLECT_GCC=gcc

COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.9.3/lto-wrapper

目标:x86_64-unknown-linux-gnu

配置为:../gcc-4.9.3/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib 线程模型:posix

上面第二步,我讲到了讲解压的gcc-4.9.3 放到 非root用户也有读权限 的目录,并不是因为无法编译,而是在调试过程中,一些常用的stl容器和算法都没有问题,但 std::string 等组件定位到了我的编译目录.

具体原因我没细查~ 可能是因为 libstdc++-v3是一个过时的库,没有默认安装到/usr/local/include/

像这样:

/root/gcc-4.9.3/gcc-build-4.9.3/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.h: No such file or directory

/root/gcc-4.9.3/gcc-build-4.9.3/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/allocator.h: No such file or directory

通过上面了解到,其实不是没有这个文件,而是非root用户是没有权限访问root用户下面内容

第 五步

难道上面不是已经完成安装了吗? 如果你只是编译不调试的话,确实是安装完毕了,不用往下看了。这个问题曾整整折腾了我一天时间。

我也看了其他人的教程,都没有提到这一点,特此写这篇文章也算是加深记忆和便于以后查看,请继续看下一步

第 六步

升级完gcc还需要升级gdb!!! 因为版本不匹配等原因导致调试的时候 print变量提示找不到符号,以及其他莫名其妙的问题…

这里我选择安装的时候gdb-7.9 ,安装gdb需要4个组件 ,python,python-devel ,texinfo,ncurses-devel

编译gdb时报错误 configure: error: no termcap library found 是缺少 ncurses-devel

编译过程中遇到莫名奇妙的报错,例如:ser-unix.c:118:1: error: conflicting types for ‘get_tty_state’,清理干净configure目录,使用root用户安装就好了

yum install texinfo

yum install ncurses-devel

yum install python

yum install python-devel

wget http://mirrors.ustc.edu.cn/gnu/gdb/gdb-7.9.tar.gz

tar xzvf gdb-7.9.tar.gz

cd gdb-7.9

./configure --with-python

make

make install

如果在安装过程中提示找不到makeinfo命令或其他错误,切换root用户再试一次

没有python的支持也可以编译,去掉–with-python选项就行了,但是gdb是无法加载python脚本的,例如c++ 的 pretty-printer 脚本是无法使用的

本文转载自:http://blog.csdn.net/xiexievv/article/details/50620170

共有 人打赏支持
rose_willow
粉丝 0
博文 90
码字总数 15682
作品 0
石家庄
运营/编辑
搭建基于http的本地yum源服务器

概述 yum相较于rpm,能够更好地解决安装软件时的依赖包问题,使用yum安装更简单更方便。搭建本地YUM源服务器,可以避免升级安装软件时占用公网带宽;有了本地YUM源服务器,可以解决无法连接I...

Zero零_度
2016/09/29
31
0
编译go及go get进度显示

一、首先附上编译完成能显示go get进度的Go包: centos7直接解压版go:http://pan.baidu.com/s/1mik3cI8 windows7直接解压版go:http://pan.baidu.com/s/1jIaxKEE 一、编译之前修改go get进度...

tantexian
2016/08/06
97
0
CentOS7 nginx安装

1 nginx安装环境 nginx是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境。 n gcc 安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装g...

宇的季节
2017/12/07
0
0
yum换国内源 yum下载rpm包 源码包安装

yum换国内源 有时候系统自带的 先删除本地光盘制作的yum源:cd /etc/yum.repos.d rm -f dvd.repo 复制系统自带的yum源到yum.repos.d目录下:cp ../yum.repos.d_bak/* . 删除CentOS-Base.rep...

黄昏残影
06/27
0
0
centos7 安装 git

1.安装编译git时需要的包 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel yum install gcc perl-ExtUtils-MakeMaker 2.下载git源码 cd /usr/src wget https:/......

Atom_me
2016/11/12
100
0
yum更换国内源、下载rpm包,源码包安装

yum更换国内源 yum本身自带的yum是国外的地址,国内下载会比较慢。 配置163yum源 rm -f dvd.repo 删除之前默认的yum源 使用wget或curl命令后,生产新的yum源文件CentOS7-Base-163.repo 查看C...

网虫变网工
2017/11/14
0
0
Centos7下安装redis实战(单机版以及集群)

一、背景   因项目需要,要引入redis做缓存,就在centos7下亲自安装了一遍redis,刚好趁着这个机会就来把redis的概念以及单机版和集群版redis安装步骤记录下来,在此和大家一起分享。 二、...

hafiz.zhang
2017/07/09
0
0
Linux平台Boost的编译方法

本博客(http://blog.csdn.net/livelylittlefish )贴出作 者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正! Linux平台Boost的编译方法 Boost的编译使用的不是已经成为公...

晨曦之光
2012/03/09
300
0
yum更换源,rpm包下载,源码包安装

一、yum更换源 yum自带源地址一般斗是国外的,可能下载速度略慢,我们可以自己换成国内的源,比如163等。 比如配置163的yum源: 1、先删除默认源文件dvd.repo 2、使用wget或者curl命令,下载...

BatmanLinux
01/09
0
0
openldap在centos7下安装

openldap在centos7下安装 知行合一,止于至善2017-12-011 阅读 Linux 下载源码包 http://www.openldap.org/software/download/OpenLDAP/openldap-release/openldap-2.4.45.tgz http://downl......

知行合一,止于至善
2017/12/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java按比例之原图生成缩略图

package com.wxp.test; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import javax.imageio.ImageIO; import sun.......

恋码之子
11分钟前
0
0
SpringCloud 微服务 (十五) 服务容错 Hystrix

壹 工作中的微服务架构,某个服务通常会被多个服务调用或者多层调用完成需求,如果某个服务不可用,导致一个系统功能不可用或者服务直接没用了的情况,这种情况称为雪崩效应 有A服务调用B服务,B服...

___大侠
13分钟前
0
0
Spring框架中的设计模式(五)

Spring框架中的设计模式(五) 通过以前的4篇文章,我们看到Spring采用了大量的关于创建和结构方面的设计模式。本文将描述属于行为方面的两种设计模式:命令和访问者。 前传: Spring框架中的...

瑞查德-Jack
16分钟前
0
0
解决phpstorm运行很卡问题!

phpStorm一旦达到这个临界值,所有智能提示、自动补全都失效了 这TM就很尴尬了,顿时感觉自己就是个废人了,纯手写代码跟便秘一样 众所周知phpStorm基于JAVA,那么这个内存限制肯定跟JAVA的虚...

sjcehui2010
19分钟前
0
0
javascript前端AES加密解密

参考了一下网上的代码加上自已的一些想法,修改,key也可以是中文, 要引入一个aes.js的js文件。 html代码 <html> <head> <title>AES加解密</title> <meta http-equiv="Content-Type"......

oisan_
22分钟前
0
0
MacOS和Linux内核的区别

有些人可能认为MacOS和Linux内核有相似之处,因为它们可以处理类似的命令和类似的软件。甚至有人认为苹果的MacOS是基于linux的。事实上,这两个内核的历史和特性是非常不同的。今天,我们来看...

六库科技
27分钟前
0
0
Vue.js-自定义事件例子

自定义组件的 v-model 2.2.0+ 新增 一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件,但是像单选框、复选框等类型的输入控件可能会将 value 特性用于不同的目的。m...

tianyawhl
30分钟前
0
0
mybatis中获取sqlSession的源码分析

0 SqlSessionFactoryBuilder类 SqlSessionFactoryBuilder sqlSessionFacotory=SqlSessionFactoryBuilder().build(reader) public SqlSessionFactory build(Reader reader) { return build(re......

writeademo
31分钟前
0
0
RobotThread.cpp

#include "RobotThread.h"RobotThread::RobotThread(int argc, char** pArgv, const char * topic) :m_Init_argc(argc), m_pInit_argv(pArgv), m_topic(topic){/** ......

itfanr
33分钟前
0
0
防御ddos攻击的常见方法

DDoS攻击是一种特殊形式的拒绝服务攻击。它利用多台已经被攻击者所控制的机器对某一台单机发起攻击,在带宽相对的情况下,被攻击的主机很容易失去反应能力。分布式拒绝服务攻击(DDoS) 是一种...

上树的熊
33分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部