Ubuntu手动编译GCC

郑重声明:本文是笔者根据个人理解所写,错误难免,欢迎拍砖!

       可以任意转载、修改,转载时是否标明出处,随君而定

系统环境

操作系统: Ubuntu 10.04 LTS - Lucid Lynx
内核版本: 2.6.35-32-generic i686 GNU/Linux
系统gcc版本: gcc (Ubuntu/Linaro 4.4.4-14ubuntu5.1) 4.4.5

一、准备工作
编译GCC需要用到3个软件包:GMP, MPFR, MPC。之所以建议先安装这3个软件包,是因为在使用./configure配置的时候,可能会遇到如下错误:

configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+.

1.1 安装GMP
因为MPFR和MPC都依赖于GMP包,所以首先安装GMP。

$ tar -xvf gmp-5.0.5.tar.bz2

建议:在Linux下手动编译软件时,要养成建立build目录的好习惯,所以建立一个gmp-5.0.5-build目录

1 $ mkdir gmp-5.0.5-build
2 $ cd gmp-5.0.5-build
3 $./../gmp-5.0.5/configure (可以使用配置参数--prefix=指定安装位置,这里使用默认 /usr/local/include 和/usr/local/lib)
4 $make
5 $make check (这一步用来确保编译正确)
6 $sudo make install

如果在执行configure的时提示错误:

checking for suitable m4... configure: error: No usable m4 in $PATH or /usr/5bin

说明我们还要安装m4这个库。

1 $ tar -xvf m4-1.4.16.tar.bz2
2 $ mkdir m4-1.4.16-build
3 $ cd m4-1.4.16-build
4 $ ./../m4-1.4.16-build/configure
5 $ make
6 $ make check
7 $ sudo make install
8 $ man m4 (如果可以成功man m4,就说明这个库安装成功)

安装完m4后,我们继续回到之前gmp-5.0.5-build的目录,继续进行configure操作。

检查GMP是否安装成功:

$ ls /usr/local/lib/libgmp*

出现以下表示成功了:

/usr/local/lib/libgmp.a /usr/local/lib/libgmp.so.10
/usr/local/lib/libgmp.la /usr/local/lib/libgmp.so.10.0.5
/usr/local/lib/libgmp.so

1.2 安装MPFR

1 $ tar -xvf mpfr-3.1.1
2 $ mkdir mpfr-3.1.1-build
3 $ cd mpfr-3.1.1-build
4 $ ./../mpfr-3.1.1/configure --with-gmp-include=/usr/local/include --with-gmp-lib=/usr/local/lib 
5 (由于mpfr依赖于gmp这个库,所以在configure时,需要设置好gmp库所在的位置,供安装mpfr库时使用。)
6 $ make
7 $ make check
8 $ sudo make install

1.3 安装MPC

1 $ tar -xvf mpc-1.0.1
2 $ mkdir mpc-1.0.1-build
3 $ cd mpc-1.0.1-build
4 $ ./../mpc-1.0.1/configure --with-gmp-include=/usr/local/include --with-gmp-lib=/usr/loca/lib
5 $ make
6 $ make check
7 $ sudo make install

1.4 设置环境变量

需要的库都安装完后,为了防止编译gcc时找不到这三个库,所以需要确认库位置是否在环境变量中 LD_LIBRARY_PATH中

$ echo $LD_LIBRARY_PATH

如果没有的话,手动添加即可

1.4.1 临时办法

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

1.4.2 永久办法

为了以后使用的时候不再设置,可以修改/etc/bashprofile或者/etc/profile。这里修改的是全局变量,对所有用户有效,
修改~/.bashprofile~/.profile可以修改用户的全局变量。

$ sudo vim /etc/profile

在文件末尾添加以下两句:

export LD_LIBRARY_PATH=/usr/local/lib
LD_LIBRARYPATH=:/usr/local/gcc-4.7.2/lib:$LD_LIBRARYPATH

保存退出

$ source /etc/profile

二、开始安装GCC

$ tar -xvf 4.7.2.tar.bz2
$ mkdir gcc-4.7.2-build
$ cd gcc-4.7.2-build
$ ../gcc-4.7.2/configure --prefix=/usr/local/gcc-4.7.2 --enable-threads=posix --disable-checking --enable-languages=c,c++,objc
(详细信息请前往 http://gcc.gnu.org/install/configure.html)
$ make

如果出现错误:

gengtype.c:923: undefined reference to `lexer_line'

解决办法:

1 $ sudo apt-get install build-essential bison flex
2 $ make clean (清除下之前没成功编译的文件)
3 $ make (继续make)

又遇到错误:

gengtype.c:923: undefined reference to `lexer_line'

查看build目录下的config.log (查看log真的很有用!),发现问题:conftest.c:10: fatal error: ppl_c.h: No such file or directory
此时需要安装ppl和cloog两个库.

1 $ sudo apt-get install libppl0.10-dev
2 $ sudo apt-get install libcloog-ppl-dev

完了之后:

1 $ make distclean (make clean和make distclean的区别可以上网了解一下)
2 $ make
3 $ make check    (保险起见)

结果又有错误: /bin/bash: autogen: 未找到命令

需要安装autogen这个库!

1 $ sudo apt-get install autogen
2 $ make check    (慢慢等吧,我的差不多编译了快2个小时,可能是机子比较垃圾吧)

总算是没什么问题了。接着我们

1 $ sudo make install

三、为GCC设置链接
接者我们用gcc -version 查看,版本还是原来的gcc4.4,并没有gcc4.7.2,这是因为gcc4.7.2的可执行文件还没有加入到搜索命令路径中,
所以我们要手动加入。

3.1 添加新版gcc的可执行文件到命令搜索路径中

1 $ which gcc    (首先用which命令查看使用gcc时,系统调用的是哪个路径下的gcc)
2 $ /usr/bin/gcc (我的显示是这样,说明gcc命令调用的是这个路径下的gcc)

为此,我们要使用ln命令,建立一个链接,让 /usr/bin/gcc 指向我们安装目录下的gcc. 因为我之前的/usr/bin/gcc已经指向了gcc4.4。

1 $ sudo rm /usr/bin/gcc    (删除这个链接)
2 $ sudo ln -s /usr/local/gcc-4.7.2/bin/gcc /usr/bin/gcc    (gcc使用软链接到gcc4.7.2)
3 $ gcc --version    (查看下gcc的版本看看有没有成功!)

显示如下,表示成功了:

$ gcc (GCC) 4.7.2 Copyright © 2012 Free Software Foundation, Inc. 本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保; 包括没有适销性和某一专用目的下的适用性担保。

3.2 用同样的方法重新链接下g++,就能使用g++4.7.2了!

1 $ which g++
2 $ /usr/bin/g++
3 $ sudo rm /usr/bin/g++
4 $ sudo ln -s /usr/loca/gcc-4.7.2/bin/g++ /usr/bin/g++
5 $ g++ -version

显示如下,表示成功了:

$ g++ (GCC) 4.7.2 Copyright © 2012 Free Software Foundation, Inc. 本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保; 包括没有适销性和某一专用目的下的适用性担保。

四、最后,随便编写一个小程序,使用gcc来测试一下吧!

原文地址:https://www.cnblogs.com/520zijuan/p/2913844.html