zoukankan      html  css  js  c++  java
  • 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来测试一下吧!

  • 相关阅读:
    SpringMVC 工作流程
    zookeeper
    Zookeeper
    HashMap
    Shiro learning
    Shiro learning
    Shiro learning
    Easy Poi入门
    Enum枚举学习- java5之前和之后的写法
    linux命令行todo列表管理工具Taskwarrior介绍
  • 原文地址:https://www.cnblogs.com/520zijuan/p/2913844.html
Copyright © 2011-2022 走看看