CentOS6.5 从源码编译安装 GCC-4.9.1 全程实录,包含测试使用《图文教程》

前言

GCC(GNU Compiler Collection,GNU编译器合集)是linux以及其他类UNIX平台上进行开源项目,软件开发等必不可少的工具链组成之一(工具链的其他成员包括 binutils,Glibc,libstdc++ 等)

另外,对于程序员以及系统管理员而言,经常需要从软件的源码手动编译安装,而不论是configure脚本,还是make工具/makefile文件,最终都需要调用gcc(或者其它编译器)来进行实际的编译工作,因此,经常需要使用gcc的新版特性,并且与旧版gcc共存,根据实际的需求进行调用。


在本篇博文中,我们以centos6.5 32位 系统上已安装的旧版gcc二进制可执行文件以及Glibc C库为基础,从网上下载最新版的gcc源码包手动编译安装,进行简单的测试,并且与make工具整合,从configure脚本进行参数传递,优化编译等。

整个过程简单明了,希望能起到抛砖引玉的作用,激发广大爱好者编程与学习的热情。  

《基础知识/先决条件》


软件包名词解释             centos6.5默认有无安装       是否需要安装才能从源码编译安装gcc

Glibc              GNU项目实现的C标准库。

分源码包和二进制RPM包,centos6.5“最小桌面”安装方案,默认已通过RPM包的形式装上,

Glibc是非交叉编译环境下,从源码编译安装gcc必备的。

***** 如果是交叉编译的环境,即在一种硬件架构/操作系统上编译(宿主机),但是生成的二进制可执行文件要在另一种硬件架构/操作系统上运行(目标机),在这种情况下,不能依赖宿主机器上已编译的C库,最好是自行下载glibc的源码并编译。 *****

glibc-static       GNU C标准库的静态版,只有在用于 -static 静态链接时才需要,

在yum软件仓库上只有二进制RPM包,centos6.5“最小桌面”安装方案,默认没有安装,

glibc-static是非交叉编译环境下,从源码编译安装gcc必备的,而且它依赖于Glibc(要先装Glibc)

libstdc++            兼容GCC的C++标准库。

在yum软件仓库上只有二进制RPM包,centos6.5“最小桌面”安装方案,默认已通过RPM包的形式装上,

从源码编译安装gcc时,如果需要编译其组件:c++编译器(g++),则需要依赖 libstdc++,所幸系统已经安装好了

gcc(已安装的旧版)    GNU编译器合集,包含c,c++编译器,还有Fortran,Ada等编译器,

分源码包和二进制RPM包,yum软件仓库上只有二进制RPM包,而且是旧版的(4.4.7版),

centos6.5“最小桌面”安装方案,默认连这个旧版都没有装上,

从源码编译安装新版gcc前,要求系统上已经安装有旧版gcc

gcc-c++         GNU编译器合集的c++增强支持包,它向gcc的c++编译器提供了更多对当前c++标准规范的支持,包含模板和错误处理。

在yum软件仓库上只有二进制RPM包,centos6.5“最小桌面”安装方案,默认没有安装,

经过笔者的测试,如果系统上没有预先安装 gcc-c++,则在编译新版gcc后面的 make 阶段会因为产生错误而退出,并且,gcc-c++ 可能还需要额外的 libstdc++ 支持,

因此最好还是通过yum先把 gcc-c++ 装上。

综上所述,在centos6.5“最小桌面”安装方案前提下,我们需要安装的软件包有:

gcc, gcc-c++, glibc-static

《准备工作》


首先,分别验证这3个软件包的状态,确保万无一失:

[[email protected] 桌面]# rpm -qi gcc
[[email protected] 桌面]# locate gcc
[[email protected] 桌面]# which gcc
[[email protected] 桌面]# whereis gcc
[[email protected] 桌面]# rpm -qi gcc-c++
[[email protected] 桌面]# locate gcc-c++
[[email protected] 桌面]# which gcc-c++
[[email protected] 桌面]# whereis gcc-c++
[[email protected] 桌面]# rpm -qi glibc-static
[[email protected] 桌面]# locate glibc-static
[[email protected] 桌面]# which glibc-static
[[email protected] 桌面]# whereis glibc-static


其次,我们可以先了解一下,关于已经安装的2个软件包:Glibc 和 libstdc++ 的详细信息:

[[email protected] 桌面]# rpm -qi glibc
[[email protected] 桌面]# locate glibc
[[email protected] 桌面]# which glibc
[root[email protected] 桌面]# whereis glibc
[[email protected] 桌面]# rpm -qi libstdc++
[[email protected] 桌面]# locate libstdc++
[[email protected] 桌面]# which libstdc++
[[email protected] 桌面]# whereis libstdc++

有了上面的基础知识后,就可以用yum 来下载安装二进制形式的旧版gcc以及 glibc-static ,gcc-c++的RPM 软件包:

(顺便一提,yum 上的glibc版本较新,可用于升级系统现有的glibc)

[[email protected] 桌面]# yum check-update
[[email protected] 桌面]# yum list gcc gcc-c++ glibc-static glibc 
[[email protected] 桌面]# yum install glibc-static gcc gcc-c++

我们先查询一下安装好的旧版gcc,g++的相关文件路径,后面的阶段会用到这些路径:(用于实现在系统上共存新版和旧版的GCC,根据需求选择性调用)

[[email protected] 桌面]# which gcc
[[email protected] 桌面]# which g++
[[email protected] 桌面]# whereis gcc
[[email protected] 桌面]# whereis g++
[[email protected] 桌面]# rpm -ql glibc-static

从上面的输出得知:

首次在系统安装(旧版的)gcc后,安装在 /usr/bin/gcc  /usr/lib/gcc  /usr/libexec/gcc    /usr/share/man/man1/gcc.1.gz  等路径下,

由此可见,从二进制旧版gcc安装时,系统默认将gcc的

可执行文件(安装到 /usr/bin/gcc),

库文件(安装到 /usr/lib/gcc),

编译器(cc1)/预链接器(collect2)(安装到 /usr/libexec/gcc)

放在不同的目录下,
(头文件放在 /usr/lib/gcc/i686-redhat-linux/4.4.4/include 目录下)

其中,cc1负责对源文件实际的编译工作;collect2进行预链接处理,实际的链接由链接器ld完成;
而centos6.5最小桌面安装默认将汇编器as的可执行文件安装在  /usr/bin/as  ;默认将链接器ld的可执行文件安装在  /usr/bin/ld;

另外, /bin 以及 /sbin 目录下的可执行文件一般供用户在shell中输入指令来调用;/usr/libexec/ 目录下的可执行文件,一般不由用户直接调用,而是由某个程序或工具软件调用,辅助前者完成特定任务

自从gcc4.4.7版本开始,官方推荐使用单独的目录,而不是在解压gcc源码后的目录中进行编译,原因在于:

优化以及生成性能更好的二进制可执行文件;

避免不可预期的错误发生;

避免污染源码所在目录;

因此,我们需要在文件系统的根目录 /  下建立3个目录,方便编译过程的管理;

还需要在 /usr/local/ 目录下建立用于存放最终生成的新版gcc的目录,并使用

configure脚本的 --prefix=/usr/local/[自定义的路径名称]  来指定,这样,gcc的可执行文件,库文件,头文件就会井然有序分别存放在相应的子目录下,日后不用时直接 rm -rf 整个安装路径就可以了,因为gcc没有 uninstall的功能进行卸载。

相比旧版本的gcc使用 /usr/bin, /usr/lib  /usr/libexec 目录来存放各自的文件,这种集中管理的办法显得更效率和安全,不会错误的卸载或删除到不相关的文件。

上面的一堆废话,用 shell 命令来表达,如下:

[[email protected] 桌面]# cd /
[[email protected] /]# mkdir {downloaded-src-dir,extracted-src-dir,compile-dir}
[[email protected] /]# cd /usr/local
[[email protected] local]# mkdir new-exec-gcc-4.9.1
[[email protected] local]# cd new-exec-gcc-4.9.1/
[[email protected] new-exec-gcc-4.9.1]# pwd
/usr/local/new-exec-gcc-4.9.1

所有的前置工作都完成后,接着,我们从GNU的gcc项目的官方 ftp 下载站点:

ftp://gcc.gnu.org/pub/gcc/releases/

来下载最新版的gcc源码包。权威的信息和版本更新说明,安装指南可以从这里获取:

https://gcc.gnu.org/

CentOS6.5 从源码编译安装 GCC-4.9.1 全程实录,包含测试使用《图文教程》

时间: 2024-10-23 13:02:56

CentOS6.5 从源码编译安装 GCC-4.9.1 全程实录,包含测试使用《图文教程》的相关文章

CentOS6.5 从源码编译安装 GCC-4.9.1 全程实录《第二部分:编译,安装,测试》

前言 GCC(GNU Compiler Collection,GNU编译器合集)是linux以及其他类UNIX平台上进行开源项目,软件开发等必不可少的工具链组成之一(工具链的其他成员包括 binutils,Glibc,libstdc++ 等) 另 外,对于程序员以及系统管理员而言,经常需要从软件的源码手动编译安装,而不论是configure脚本,还是make工具/makefile文件,最终 都需要调用gcc(或者其它编译器)来进行实际的编译工作,因此,经常需要使用gcc的新版特性,并且与旧版gc

Linux CentOS6.5下 源码编译安装MySQL 5.6.16【给力详细教程】

一.编译安装MySQL前的准备工作 安装编译源码所需的工具和库 yum install gcc gcc-c++ ncurses-devel perl 安装cmake,从http://www.cmake.org下载源码并编译安装 wget http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz tar -xzvf cmake-2.8.10.2.tar.gz cd cmake-2.8.10.2 ./bootstrap ; make ; make i

centos6.6 从源码编译安装mysql5.7.5

1. 安装相关工具 # yum -y install gcc-c++ ncurses-devel cmake make perl \ gcc autoconf automake zlib libxml libgcrypt libtool bison 2. 清理环境 检查boost版本: # rpm -qa boost* 卸载boost-*等库: # yum -y remove boost-* 3. mysql源码包下载 mysql5.7源码下载: http://mirrors.sohu.com/

CentOS6.5下源码编译安装httpd2.4.23

1.安装环境为CentOS6.5,64位 [[email protected] app]# uname -r 2.6.32-504.30.3.el6.x86_64 [[email protected] app]# cat /etc/redhat-release  CentOS release 6.5 (Final) [[email protected] app]# 2.官网上下载源码包 wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/

centos6.5 x64 源码编译安装 gitlab7.9.2

centos6.5x64安装gitlab7.9.2 安装gitlab 注意,以下一到五步骤都需要用root用户操作 一:初始化安装环境 yum -ygroupinstall 'Development Tools' yum -yinstall readline readline-devel ncurses-devel gdbm-devel glibc-develtcl-devel openssl-devel curl-devel expat-devel db4-devel byaccsqlite-

MySQL源码编译安装(CentOS-6.6+MySQL-5.6)

MySQL源码编译安装(CentOS-6.6+MySQL-5.6) 部署环境 操作系统:CentOS-6.6-x86_64-bin-DVD1.iso MySQL版本:mysql-5.6.26.tar.gz 操作用户:root 系统IP:192.168.1.205 主机名:edu-mysql-01 配置:4核.4G内存 一.服务器配置: 1.配置网络 # vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=stati

mysql5.7.10 源码编译安装记录 (centos6.4)【转】

一.准备工作 1.1 卸载系统自带mysql 查看系统是否自带MySQL, 如果有就卸载了, 卸载方式有两种yum, rpm, 这里通过yum卸载 rpm -qa | grep mysql //查看系统自带mysql yum -y remove mysql-* //卸载mysql rpm -e --nodeps mysql-5.1.73-3.el6_5.x86_64 //卸载mysql 1.2 卸载系统自带boost,并安装boost_1_59_0 mysql 5.7 依赖于boost_1_59

马哥linux学习笔记:源码编译安装

由于rpm包在作者制作封装的时候已经把程序的一些特性固定了,如果我们根据自己的需求,需要运用程序的一些没有普适性相关特性,就需要下载程序的源码手动编译安装了,这里只是简单的介绍一下C代码的程序包编译安装方法. 为了能更直观的看到源码编译安装的过程,我演示一下在centos7.2环境中编译安装httpd2.2: 首先,编译的前提是得有称手的工具及环境了,编译c源代码就需要用到开发工具,make,gcc了,环境就需要开发库跟头文件了,如果系统中没有这些,就需要yum安装了. 这里我运行yum gro

Linux程序包管理之yum仓库、源码编译安装

CentOS:yum,dnf URL:ftp://172.16.0.1/pub yum是C/S架构,是rpm的前端工具,依赖于rpm存在的: 1.本地要有yun程序: 2.本地要有配置文件(配置远程服务器yum仓库或本地服务器yum仓库): 3.要有存在的文件服务器(程序包仓库即yum仓库).(也可以在本地配置服务器yum仓库): yum支持的服务器有两种:一种是ftp服务器,第二种是http服务器: yum工作简述: yum是客户端,也认为是自我独立管理的组件,需要联系远程的仓库,从仓库中下载