精华内容
下载资源
问答
  • 源代码编译GCC4.6.1

    千次阅读 2016-07-14 11:54:42
    GCC,编译,源码

    下载地址:

    http://ftp.gnu.org/gnu/gcc/gcc-4.6.1/

    clipboard

    如果下载的是gcc-g++-4.6.1.tar.bz2编译,就会出错,因为gcc-g++只是gcc4.6.4的子集,文件不全的:

    fdr@fdr-desktop:~/soft_libs/gcc-4.6.1/libstdc++-v3$ ./configure 
    configure: error: cannot find install-sh, install.sh, or shtool in "." "./.." "./../.."

    发现报错了,因为这个config是需要使用autoconf工具来根据平台的configure.ac生成的,

    gcc需要GMP、MPFR、MPC这三个库,下载地址:

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

    一般工具都安装在/usr/local/下面,应用程序安装在/opt/下面。我们使用configure时可以使用--prefix来指定软件的安装目录。

    如果不配置该选项,安装后可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,

    其它的资源文件放在/usr /local/share,比较凌乱。

    gmp编译:

    ./configure --prefix=/usr/local/gmp-4.3.2

    make

    sudo make install

    mpfr编译:

    ./configure --prefix=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2

    make

    sudo make install

    mpc编译:

    ./configure --prefix=/usr/local/mpc-0.8.1 --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2

    ./configure --prefix=/usr/local/mpc-0.8.2 --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2

    make

    sudo make install

    安装libtool2.2.6a(但是要求的是2.2.7a,版本必须匹配)

    ftp://ftp.gnu.org/gnu/libtool/

    ./configure

    make

    sudo make install

    安装路径是:

    /usr/local/bin/libtoolize

    /usr/local/bin/libtool

    然后将libtool拷贝到gcc-4.6.1/host-i686-pc-linux-gnu/lto-plugin下面

    测试发现下载2.2.8版本也不行。

    但是2.2.6a版本虽然要报错,但是重新cp到指定目录也没问题了。

    应该最好是下载2.2.7a版本:

    ftp://ftp.linux.ee/pub/gnu/cygwin/release/libtool/libtool-2.2.7a-10-src.tar.bz2

    libtool-2.2.7a.tar.bz2

    安装PPL0.11

    ./configure

    make

    make install

    安装路径是:

    /usr/local/include

    /usr/local/lib

    Polylib的下载安装:

    http://icps.u-strasbg.fr/PolyLib/polylib_src/?C=M;O=D

    下载的源码编译不过,有错误。需要改动源码:

    clipboard[1]

    改成:

    clipboard[2]

    ./configure

    sudo make

    sudo make install

    安装路径是:

    /usr/local/include

    /usr/local/lib/

    安装cloog0.15.9

    下面是下载链接:

    http://ftp.osuosl.org/pub/clfs/conglomeration/cloog-ppl/

    http://repo.or.cz/cloog.git/tags

    但是这里面就没有提供0.15.*的版本。

    于是在csdn上面搜索到了:

    cloog-ppl-0.15.10.tar.gz(0.15.10版本有问题)

    cloog-ppl-0.15.11.tar.gz

    cloog依赖gmp和polylib(可选的)。

    ./configure --with-gmp=/usr/local/gmp-4.3.2 --with-polylib=/usr/local --with-ppl=/usr/local/

    make

    sudo make install

    安装路径是:

    /usr/local/include/

    /usr/local/lib

    报错1:

    fdr@fdr-desktop:~/soft_libs/gcc4.6.1/ref/cloog-ppl-0.15.10$ make
    make: *** No rule to make target `m4/libtool.m4', needed by `Makefile.in'.  Stop.

    0.15.10这个版本有问题。换0.15.11版本

    报错2:

    error: polylib/missing.h: No such file or directory

    是需要ppl的支持,加上--with-ppl的参数

    GCC编译:

    1,配置:

    ./configure --prefix=/usr/local/gcc-4.6.1 -enable-threads=posix -disable-checking -disable-multilib -enable-languages=c,c++ --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2 --with-mpc=/usr/local/mpc-0.8.1

    ./configure --prefix=/usr/local/gcc-4.6.1 -enable-threads=posix -disable-checking -disable-multilib -enable-languages=c,c++ --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2 --with-mpc=/usr/local/mpc-0.8.2 --with-ppl-include=/usr/local/include --with-ppl-lib=/usr/local/lib

    2.指定lib路径

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-0.8.1/lib:/usr/local/gmp-4.3.2/lib:/usr/local/mpfr-2.4.2/lib

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-0.8.2/lib:/usr/local/gmp-4.3.2/lib:/usr/local/mpfr-2.4.2/lib

    sudo ln -s /usr/local/mpc-0.8.2/lib/libmpc.so.2 /lib/libmpc.so.2  (避免后面再报找不到该库的错误)

    sudo ldconfig

    3.添加libtool:

    $ /usr/local/bin/libtoolize --force

    4.编译:

    sudo make

    #为了加快编译,采用4线程编译

    #sudo make -j4

    5.check

    sudo apt-get install autogen

    sudo apt-get install dejagnu    (因为要用runtest)

    sudo make check

    注意,在Running /home/fdr/soft_libs/gcc4.6.1/gcc-4.6.1/gcc/testsuite/gcc.c-torture/compile/compile.exp ...会执行很久时间。

    6.安装

    原来的gcc和gdb的路径是/usr/bin/gcc /usr/bin/gdb,而我们的gcc安装路径将会是在/usr/local/gcc-4.6.1

    sudo make install

    创建软连接到/usr/bin下面

    编译报错解答:

    报错1:

    make[4]: Entering directory `/home/fdr/soft_libs/gcc4.6.1/gcc-4.6.1/host-i686-pc-linux-gnu/lto-plugin'

    /bin/sh ./libtool --tag=CC --tag=disable-static  --mode=compile gcc -DHAVE_CONFIG_H -I. -I../.././lto-plugin  -I../.././lto-plugin/../include -DHAVE_CONFIG_H  -Wall -Werror -g -fkeep-inline-functions -c -o lto-plugin.lo ../.././lto-plugin/lto-plugin.c

    /bin/sh: ./libtool: No such file or directory

    但是我们是安装了libtool的:whereis libtool:

    libtool: /usr/bin/libtool /usr/share/libtool /usr/share/man/man1/libtool.1.gz

    因为他是直接使用./libtool的方式调用的,但是我们的libtool是直接安装到/usr/bin下面的,所以解决办法如下:

    方法1:)把libtool拷贝到目录

                    /home/fdr/soft_libs/gcc4.6.1/gcc-4.6.1/host-i686-pc-linux-gnu/lto-plugin

                    即可

    方法2:)

    libtool介绍:

    可以认为libtool是gcc的一个抽象,其包装了gcc(或者其他的编译器),用户无需知道细节,只要告诉libtool需要编译哪些库即可,libtool将处理库的依赖等细节。libtool只与后缀名为lo、la为的libtool文件打交道。

    报错2:

    make[5]: Entering directory `/home/fdr/soft_libs/gcc4.6.1/gcc-4.6.1/i686-pc-linux-gnu/libgomp'

    /bin/sh ./libtool --tag=CC   --mode=compile /home/fdr/soft_libs/gcc4.6.1/gcc-4.6.1/host-i686-pc-linux-gnu/gcc/xgcc -B/home/fdr/soft_libs/gcc4.6.1/gcc-4.6.1/host-i686-pc-linux-gnu/gcc/ -B/usr/local/gcc-4.6.1/i686-pc-linux-gnu/bin/ -B/usr/local/gcc-4.6.1/i686-pc-linux-gnu/lib/ -isystem /usr/local/gcc-4.6.1/i686-pc-linux-gnu/include -isystem /usr/local/gcc-4.6.1/i686-pc-linux-gnu/sys-include    -DHAVE_CONFIG_H -I. -I../.././libgomp  -I../.././libgomp/config/linux/x86 -I../.././libgomp/config/linux -I../.././libgomp/config/posix -I../.././libgomp  -Wall -Werror -ftls-model=initial-exec -march=i486 -mtune=i686 -Wc,-pthread -g -O2 -MT alloc.lo -MD -MP -MF .deps/alloc.Tpo -c -o alloc.lo ../.././libgomp/alloc.c

    libtool: Version mismatch error.  This is libtool 2.2.6b Debian-2.2.6b-2ubuntu1, but the

    libtool: definition of this LT_INIT comes from libtool 2.2.7a.

    libtool: You should recreate aclocal.m4 with macros from libtool 2.2.6b Debian-2.2.6b-2ubuntu1

    libtool: and run autoconf again.

    make[5]: *** [alloc.lo] Error 63

    需要下载一个对应版本的libtool:ftp://ftp.gnu.org/gnu/libtool/

    报错3:

    error while loading shared libraries: libmpc.so.2: cannot open shared object file: No such file or directory

    需要把mpc0.8.1换成0.8.2

    报错3.1

    我们把mpc已经换成0.8.2了,最后又开始报错:

    fdr@fdr-desktop:~/soft_libs/gcc4.6.1/gcc-4.6.1/i686-pc-linux-gnu/libgcc$ cat config.log  | grep error
    xgcc: error: unrecognized option '-V'
    xgcc: fatal error: no input files
    xgcc: error: unrecognized option '-qversion'
    xgcc: fatal error: no input files
    /home/fdr/soft_libs/gcc4.6.1/gcc-4.6.1/host-i686-pc-linux-gnu/gcc/cc1: error while loading shared libraries: libmpc.so.2: cannot open shared object file: No such file or directory
    /home/fdr/soft_libs/gcc4.6.1/gcc-4.6.1/host-i686-pc-linux-gnu/gcc/cc1: error while loading shared libraries: libmpc.so.2: cannot open shared object file: No such file or directory

    由于已经取消了变量:LD_LIBRARY_PATH,故系统无法自动找到libmpc.so.2,采取了一个变通的方式,建立了一个软链接:

    sudo ln -s /usr/local/mpc-0.8.2/lib/libmpc.so.2 /lib/libmpc.so.2

    报错4:

    通过config.log查看到的详细错误原因:conftest.c:10:19: error: ppl_c.h: No such file or directory

    需要安装ppl还有cloog的库,ppl的下载地址是:

    ftp://ftp.cs.unipr.it/pub/ppl/releases/

    我们需要下载大于等于0.11版本的ppl,但是主版本不能变,只能是0

    并在configure的时候指定--with-ppl-include --with-ppl-lib

    $ sudo apt-get install libppl0.10-dev

    $ sudo apt-get install libcloog-ppl-dev  (这是0.15.8版本,无法使用)

    cloog下载地址是:

    http://gcc.gnu.org/wiki/CLooG-PPL

    报错5:

    conftest.c:16: error: 'choke' undeclared (first use in this functio

    查看config.log,可以看到:

    configure: failed program was:

    | /* confdefs.h */

    | #define PACKAGE_NAME ""

    | #define PACKAGE_TARNAME ""

    | #define PACKAGE_VERSION ""

    | #define PACKAGE_STRING ""

    | #define PACKAGE_BUGREPORT ""

    | #define PACKAGE_URL ""

    | #define LT_OBJDIR ".libs/"

    | /* end confdefs.h.  */

    | #include "ppl_c.h"

    | int

    | main ()

    | {

    |

    |     #if PPL_VERSION_MAJOR != 0 || PPL_VERSION_MINOR < 11

    |     choke me

    |     #endif

    |

    |   ;

    |   return 0;

    | }

    也就是PPL_VERSION_MAJOR 不是0或者说PPL_VERSION_MINOR小于了11就不支持。

    所以PPL需要下载大于等于0.11版本的。

    报错6:

    conftest.c:15: error: 'choke' undeclared (first use in this function)

    configure: failed program was:

    | /* confdefs.h */

    | #define PACKAGE_NAME ""

    | #define PACKAGE_TARNAME ""

    | #define PACKAGE_VERSION ""

    | #define PACKAGE_STRING ""

    | #define PACKAGE_BUGREPORT ""

    | #define PACKAGE_URL ""

    | #define LT_OBJDIR ".libs/"

    | /* end confdefs.h.  */

    | #include "cloog/cloog.h"

    | int

    | main ()

    | {

    | #if CLOOG_VERSION_MAJOR != 0     || CLOOG_VERSION_MINOR != 15     || CLOOG_VERSION_REVISION < 9

    |     choke me

    |    #endif

    |   ;

    |   return 0;

    | }

    也就是需要添加--with-cloog,并且保证下载的版本是0.15.9以上的

    报错7:

    checking for i686-pc-linux-gnu-gcc... /home/fdr/soft_libs/gcc4.6.1/gcc-4.6.1/host-i686-pc-linux-gnu/gcc/xgcc -B/home/fdr/soft_libs/gcc4.6.1/gcc-4.6.1/host-i686-pc-linux-gnu/gcc/ -B/usr/local/gcc-4.6.1/i686-pc-linux-gnu/bin/ -B/usr/local/gcc-4.6.1/i686-pc-linux-gnu/lib/ -isystem /usr/local/gcc-4.6.1/i686-pc-linux-gnu/include -isystem /usr/local/gcc-4.6.1/i686-pc-linux-gnu/sys-include 

    checking for suffix of object files... configure: error: in `/home/fdr/soft_libs/gcc4.6.1/gcc-4.6.1/i686-pc-linux-gnu/libgcc':

    configure: error: cannot compute suffix of object files: cannot compile

    See `config.log' for more details.

    make[2]: *** [configure-stage1-target-libgcc] Error 1

    查看错误信息:

    cat /home/fdr/soft_libs/gcc4.6.1/gcc-4.6.1/i686-pc-linux-gnu/libgcc/config.log | grep error

    原因是:

    error while loading shared libraries: libmpc.so.2: cannot open shared object file: No such file or directory

    需要libmpc.so创建一个软连接到/usr/lib下面,因为LD_LIBRARY_PATH被取消掉了

    =====================================================================================

    =====================================================================================

    参考资料:

    1 在redhat 5上编译jdk

    1.1 出现错误:configure: error: cannot compute suffix of object files: cannot compile

        需要将mpc、gmp和mpfr目录加入到环境变量中,在/etc/profile文件末尾加上:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-0.8.1/lib:/usr/local/gmp-5.0.1/lib:/usr/local/mpfr-3.0.0/lib,注意修改目录,之后运行#source /etc/profile使其生效即可。

    1.2 FreeType version  2.3.0  or higher is required.

        强制卸载了freetype -2.2.1-28.el5_7.2

        rpm –e –nodeps freetype -2.2.1-28.el5_7.2

        应该值之前的freetype版本的影响。

    1.3 error while loading shared libraries: libmpc.so.2: cannot open shared object file: No such file or directory

        由于已经取消了变量:LD_LIBRARY_PATH,故系统无法自动找到libmpc.so.2,采取了一个变通的方式,建立了一个软链接:

        ln -s /usr/local/mpc-0.8.1/lib/libmpc.so.2 /lib/libmpc.so.2

    1.4 /usr/local/gcc-4.8.1/libexec/gcc/i686-pc-linux-gnu/4.8.1/cc1plus: error while loading shared libraries: libmpfr.so.1: cannot open shared object file: No such file or directory

        同错误3类似。

    1.5 /opt/jdkbuild/jdk7/hotspot/src/share/vm/oops/constantPoolOop.cpp:272:39: error: converting 'false' to pointer type 'methodOop' [-Werror=conversion-null]

       if (cpool->cache() == NULL)  return false;  // nothing to load yet

                                                                                  ^

        cc1plus: all warnings being treated as errors

        打了一个补丁:

        http://hg.openjdk.java.net/hsx/hotspot-rt/hotspot/rev/f457154eee8b

        见说明:

        http://mail.openjdk.java.net/pipermail/hotspot-dev/2012-July/006243.html

    1.6 /lib/libmpfr.so.1: undefined reference to `__gmp_get_memory_functions'

        见:http://www.mpfr.org/faq.html#undef_ref1

        中的解释,这种错误多见于将GMP 4.1.4升级到更高版本的时候,或者同一台机器上安装了多个版本的GMP。这种错误可能意味着你应用了GMP 4.2.x的Header,但应用了GMP 4.1.4的library。所以将原gmp卸载:

        rpm –e –nodeps gmp-4.1.4-10.el5

    1.7 libgmp.so.3: cannot open shared object file: No such file or directory

        同错误1.3类似。

    2 在ubuntu 12上编译jdk

        参考资料:

        1. http://www.kaifajie.cn/ubuntu/10272.html

        2. http://hadwinzhy.gitcafe.com/blog/2013/01/21/compile-jdk/

    2.1 ERROR: You seem to not have installed ALSA 0.9.1 or higher

        不需要从ALSA官网下载alsa-dev和alsa-drive, ubuntu提供包的
    sudo apt-get install libasound2-dev

    2.2 /usr/bin/gawk: not found

        apt-get install gawk

    2.3 ERROR: echo "*** This OS is not supported:" 'uname -a'; exit 1;

        注释掉hotspot/make/linux/Makefile里面的checkOS

        check_os_version:

        #ifeq ($(DISABLE_HOTSPOT_OS_VERSION_CHECK)$(EMPTY_IF_NOT_SUPPORTED),)
        # $(QUIETLY) >&2 echo "*** This OS is not supported:" `uname -a`; exit 1;
        #endif

        也可以最好的办法是在make参数后面添加 :

        DISABLE_HOTSPOT_OS_VERSION_CHECK=OK

    2.4 /opt/jdkbuild/jdk7/hotspot/src/share/vm/runtime/interfaceSupport.hpp:430:0: error: "__LEAF" redefined [-Werror]

        打补丁:

        http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/a6eef545f1a2

    2.5 undefined reference to ‘snd_pcm_*’

        见说明:

        http://comments.gmane.org/gmane.comp.java.openjdk.build.devel/5311

        打补丁:

        http://mail.openjdk.java.net/pipermail/build-dev/2011-November/005188.html

        这篇文章里也有说明。

    2.6 cannot find -lX11

        apt-get install libx11-dev

    2.7 ../../../src/solaris/native/sun/awt/awt.h:38:27: fatal error: X11/Intrinsic.h: No such file or directory

        apt-get install libxt-dev

    2.8 X11/extensions/shape.h: No such file or directory

        apt-get install libxtst-dev

        见说明:

        http://www.csdnjava.com/forum.php?mod=viewthread&tid=147509

    2.9 ../../../src/solaris/native/sun/awt/awt_p.h:51:36: fatal error: X11/extensions/Xrender.h: No such file or directory

        apt-get install libxrender-dev

    展开全文
  • ubuntu16.04编译gcc-5.4.0源代码

    千次阅读 2016-11-14 21:35:41
    本文内容参考多个博客,记录比较随意,仅作为个人笔记查看。 ...由于要移植gcc,所以不得已只能做如此似乎...目的:编译gcc-5.4.0 1.获取代码及新建目录 1.1下载 gcc官网所提供资源镜像 1.2解压

    本文内容参考多个博客,记录比较随意,仅作为个人笔记查看。


    简介:

    由于要移植gcc,所以不得已只能做如此似乎多此一举的实验。。

    我的系统软件版本情况如下(供参考):

    ubuntu 16.04

    gcc-5.4.0

    目的:编译gcc-5.4.0


    1.获取代码及新建目录

    1.1下载

    gcc官网所提供资源镜像

    1.2解压

    1.3 建立目录

    假设你解压到的目录为:  ~/home/hwh/gcc-4.2.3,那么我们就用${srcdir}表示它。

    我们同时需要建立一个目标目录${objdir}用来存放编译结果的地方,GCC建议编译后的文件不要放在源目录${srcdir]中(虽然这样做也可以),最好单独存放在另外一个目录中,而且不能是${srcdir}的子目录。我们这里在建立一个objdir为: ~/home/hwh/gcc-4.2.3obj


    同时我们还需要建立一个安装目录,就是防止编译后的头文件,库文件,和可执行文件。

    一般为/usr/local/gcc-5.4.0

    然而我直接建立在/home/ren/program里,只是测试



    最终我们有3个目录

    ${srcdir}            /home/ren/program/gcc-5                     源代码解压后的目录

    ${objdir}             /home/ren/program/gcc-build                 自己新建的用于存放编译结果的目录,以后的操作都在这个目录里面

    ${destdir}          /home/ren/program/gcc-dst                       用来安装编译结果的目录


    3. 安装依赖库及相关软件

    $ sudo apt-get install libc6-dev libgmp-dev libmpfr-dev texinfo

    这个需要根据http://gcc.gnu.org/install/prerequisites.html里面的要求下载依赖库。

    上面我安装了常规需要依赖的库,但在编译时有些错误,所以后来又安装了一些库


    还需要另外三个库才能成功编辑 gcc,这三个库分别是:mpcmpfr 和 gmp,编译安装到gcc-dst或在编译gcc时用参数指明路径(我采用)

    安装参考如下步骤:


    ====================================================================================

    打开终端进入上述几个文件所在的目录:

    ?
    1
    2
    cd ~
    cd Downloads

    我们先开始编译 gmp 库

    ?
    1
    2
    3
    4
    5
    cd gmp*
    mkdir build && cd build
    .. /configure --prefix= /usr/gcc_4_7 --build=x86_64-linux-gnu
    make
    sudo make install

    几分钟后你将有一个已编译好和安装好的 gmp 库,如果一切顺利,恭喜你!

    使用相同的步骤来编译 MPFR:

    ?
    1
    2
    3
    4
    5
    6
    7
    cd ..
    cd ..
    cd mpfr*
    mkdir build && cd build
    .. /configure --build=x86_64-linux-gnu --prefix= /usr/gcc_4_7 --with-gmp= /usr/gcc_4_7
    make
    sudo make install

    紧接着是 MPC:

    ?
    1
    2
    3
    4
    5
    6
    7
    cd ..
    cd ..
    cd mpc*
    mkdir build && cd build
    .. /configure --build=x86_64-linux-gnu --prefix= /usr/gcc_4_7 --with-gmp= /usr/gcc_4_7 --with-mpfr= /usr/gcc_4_7
    make
    sudo make install

    ====================================================================================


    4. 为头文件以及所需库添加链接


    以下作为参考,反正我做了这一步,不知道有何卵用

    添加如下链接, 这取决于你的 Ubuntu 系统架构, 如果你使用的是64位的ubuntu系统应当使用x86_64-Linux-gnu替代i386-linux-gnu

    [cpp]  view plain  copy
     print ?
    1. $ cd /usr/include  
    2. $ sudo ln -s i386-linux-gnu/bits bits  
    3. $ sudo ln -s i386-linux-gnu/gnu gnu  
    4. $ sudo ln -s i386-linux-gnu/sys sys  
    5. $ sudo ln -s i386-linux-gnu/asm asm  
    6. $ cd /usr/lib  
    7. $ sudo ln -s i386-linux-gnu/crt1.o crt1.o  
    8. $ sudo ln -s i386-linux-gnu/crti.o crti.o  
    9. $ sudo ln -s i386-linux-gnu/crtn.o crtn.o   

    [这里需要了解一下ln -s 的语法:

    sudo ln -s 源文件 目标文件

    当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,
    我们只要在某个固定的目录放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁
    盘空间。

    具体大家可以谷哥或度娘,但是提供一个地址供参考:http://blog.chinaunix.net/uid-26942706-id-3207669.html

    ]



    5. 配置

    配置的目的是决定将GCC编译器安装到什么地方(${destdir}),支持什么语言以及指定其它一些选项等。其中,${destdir}不能与${objdir}或${srcdir}目录相同。

    配置是通过执行${srcdir}下的configure来完成的。其命令格式为(记得用你的真实路径替换${destdir}):

    命令格式为:

    [cpp]  view plain  copy
     print ?
    1. % ${srcdir}/configure --prefix=${destdir} [其它选项]   

    但是其他选项如此多,怎么办?

    我参考了系统自带gcc-4.6.3的编译参数(使用gcc -v查看),然后将不相关的配置选项都删除了。

     最终我的配置为:

    ../gcc-5.4.0/configure --prefix=/home/ren/program/gcc-dst --enable-threads=posix --disable-checking --enable--long-long  --with-system-zlib --enable-languages=c,c++ --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-gmp=/usr/gcc_4_8 --with-mpfr=/usr/gcc_4_8 --with-mpc=/usr/gcc_4_8


    6. 编译

    命令:

    [cpp]  view plain  copy
     print ?
    1. $ make  
    这是一个漫长的过程,并且可能出现N多错误,不要怕,有谷哥和度娘呢。

    晚上每个人编译的错误情况都不相同,我就将我所遇到的错误及解决办法帖出来,供大家参考。

    我遇到的问题类似,这几个问题很有参考价值

    问题:
    a. 错误码:"Java/jcf-io.c: cann't find zlib.h"?
    [Method]: 将/gcc-4.2.3/gcc/java下的jcf-io.c中的#include "zlib.h"
    修改为#include "../../zlib/zlib.h"

    b. 错误码:"/usr/bin/ld: cannot find -lz"?
    [Method]: 安装zlib-dev这个包,在线安装命令为:apt-get install zlib1g-dev。

    c. 错误码:"xgcc: java/parse-scan.c: No such file or directory"?
    [Method]: 
    <1>安装bison: sudo apt-get install bison
    <2>进入gcc-4.2.3/gcc/java目录,因该目录有parse-scan.y
    执行bison -t -o parse-scan.c parse-scan.y


    以下作为参考,抄袭其他博主

    =================================================

    7. 安装

    安装很简单:

    [cpp]  view plain  copy
     print ?
    1. ~$ sudo make install  


    8.替换系统自带gcc-4.6.3为我们新编译的gcc-4.2.3

    知识储备:GCC 4.6.3的所有文件,包括命令文件(如gcc、g++)、库文件等都在${destdir}目录下分别存放,如命令文件放在bin目录下、库文件在lib下、头文件在include下等。由于命令文件和库文件所在的目录还没有包含在相应的搜索路径内,所以必须要作适当的设置之后编译器才能顺利地找到并使用它们。


    8.1查看原来gcc所在路径

    [cpp]  view plain  copy
     print ?
    1. ~$ which gcc  
    2. /usr/bin/gcc  
    原来的gcc命令在/usr/bin目录下。因此我们可以把GCC 4.6.3中的gcc、g++、gcj等命令在/usr/bin目录下分别做一个符号连接:

    (这里你可以根据你的需要链接gcc, g++, gcj)

    [cpp]  view plain  copy
     print ?
    1. % cd /usr/bin  
    2. % ln -s ${destdir}/bin/gcc-4.2 gcc  
    3. % ln -s ${destdir}/bin/g++-4.2 g++  
    4. % ln -s ${destdir}/bin/gcj-4.2 gcj   

    我的命令:

    cd /usr/bin 

    ln -s /home/ren/program/gcc-dst/bin/gcc gcc_my5_4  
    ln -s /home/ren/program/gcc-dst/bin/g++ g++_my5_4  


    9. 测试

    使用gcc_my5_4   -v检查版本、路径、配置信息等。



    以下为配置时所用到的命令记录

    ==============================================

    ../gcc-4.0.2/configure --prefix=/usr/local/gcc-4.0.2 --enable-threads=posix --disable-checking --enable--long-long  --with-system-zlib --enable-languages=c,c++  

    ../gcc-4.0.2/configure --prefix=/usr/local/gcc-4.0.2 --enable-threads=posix --disable-checking --enable--long-long  --with-system-zlib --enable-languages=c,c++ --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu

    ../gcc-4.8.5/configure --prefix=/usr/local/gcc-4.8.5 --enable-threads=posix --disable-checking --enable--long-long  --with-system-zlib --enable-languages=c,c++ --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu

    ../gcc-2.95.3/configure --prefix=/usr/local/gcc-2.95.3 --enable-threads=posix --disable-checking --enable--long-long  --with-system-zlib --enable-languages=c,c++ --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu

    ../gcc-3.4.0/configure --prefix=/usr/local/gcc--3.4.0 --enable-threads=posix --disable-checking --enable--long-long  --with-system-zlib --enable-languages=c,c++ --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu

    ../gcc-5.4.0/configure --prefix=/home/ren/program/gcc-dst --enable-threads=posix --disable-checking --enable--long-long  --with-system-zlib --enable-languages=c,c++ --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-gmp=/usr/gcc_4_8 --with-mpfr=/usr/gcc_4_8 --with-mpc=/usr/gcc_4_8

    ../configure --prefix=/home/ren/program/gcc-dst --build=x86_64-linux-gnu
    cd ..
    cd ..
    cd mpfr*
    mkdir build && cd build
    ../configure --build=x86_64-linux-gnu --prefix=/home/ren/program/gcc-dst --with-gmp=/usr/gcc_4_7
    make
    sudo make install


    ln -s /home/ren/program/gcc-dst/bin/gcc gcc_my5_4  
    ln -s /home/ren/program/gcc-dst/bin/g++ g++_my5_4  



    展开全文
  • GCC 源代码编译安装文档, 怎么用源代码安装GCC
  • ubuntu12.04编译gcc-4.2.3源代码

    千次阅读 2013-02-19 09:42:49
    简介: 最近需要编译openoffice这个大型的开源办公软件,可是编译openoffice的软件要求第一个就有对gcc版本的有要求。 ...所以我这里需要自己编译gcc。我这里打算编译gcc-4.2.3版本。 我的系

    简介:

    最近需要编译openoffice这个大型的开源办公软件,可是编译openoffice的软件要求第一个就有对gcc版本的有要求。

    我看了网上的经验,有人使用gcc-4.4.5都不能编译openoffice,而ubuntu下面apt-get install能安装的gcc最低版本就是gcc-4.4.5。

    所以我这里需要自己编译gcc。我这里打算编译gcc-4.2.3版本。


    我的系统软件版本情况如下(供参考):

    ubuntu12.04

    gcc-4.6.3

    目的:编译gcc-4.2.3


    1.获取代码及新建目录

    1.1下载

    我是通过http://gcc.gnu.org/mirrors.html下载的。

    1.2解压

    $ tar xvjf gcc-4.1.2.tar.bz2
    在ubuntu12.04自带了解压缩软件,可以直接通过右键菜单就可以解压。

    1.3 建立目录

    假设你解压到的目录为:  ~/home/hwh/gcc-4.2.3,那么我们就用${srcdir}表示它。

    我们同时需要建立一个目标目录${objdir}用来存放编译结果的地方,GCC建议编译后的文件不要放在源目录${srcdir]中(虽然这样做也可以),最好单独存放在另外一个目录中,而且不能是${srcdir}的子目录。我们这里在建立一个objdir为: ~/home/hwh/gcc-4.2.3obj

    ~$ mkdir gcc-4.2.3obj
    ~$ cd gcc-4.2.3obj

    同时我们还需要建立一个安装目录,就是防止编译后的头文件,库文件,和可执行文件。

    一般为/usr/local/gcc-4.2.3

    命令:

    ~$ cd /usr/local
    ~$ sudo mkdir gcc-4.2.3
    // 输入密码

    最终我们有3个目录

    ${srcdir}             ~/home/hwh/gcc-4.2.3                          源代码解压后的目录

    ${objdir}             ~/home/hwh/gcc-4.2.3obj                    自己新建的用于存放编译结果的目录,以后的操作都在这个目录里面

    ${destdir}          /usr/local/gcc-4.2.3                                用来安装编译结果的目录


    3. 安装依赖库及相关软件

    $ sudo apt-get install libc6-dev libgmp-dev libmpfr-dev texinfo

    这个需要根据http://gcc.gnu.org/install/prerequisites.html里面的要求下载依赖库。

    上面我安装了常规需要依赖的库。


    4. 为头文件以及所需库添加链接

    添加如下链接, 这取决于你的 Ubuntu 系统架构, 如果你使用的是64位的ubuntu系统应当使用x86_64-linux-gnu替代i386-linux-gnu

    $ cd /usr/include
    $ sudo ln -s i386-linux-gnu/bits bits
    $ sudo ln -s i386-linux-gnu/gnu gnu
    $ sudo ln -s i386-linux-gnu/sys sys
    $ sudo ln -s i386-linux-gnu/asm asm
    $ cd /usr/lib
    $ sudo ln -s i386-linux-gnu/crt1.o crt1.o
    $ sudo ln -s i386-linux-gnu/crti.o crti.o
    $ sudo ln -s i386-linux-gnu/crtn.o crtn.o 

    [这里需要了解一下ln -s 的语法:

    sudo ln -s 源文件 目标文件

    当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,
    我们只要在某个固定的目录放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁
    盘空间。

    具体大家可以谷哥或度娘,但是提供一个地址供参考:http://blog.chinaunix.net/uid-26942706-id-3207669.html

    ]



    5. 配置

    配置的目的是决定将GCC编译器安装到什么地方(${destdir}),支持什么语言以及指定其它一些选项等。其中,${destdir}不能与${objdir}或${srcdir}目录相同。

    配置是通过执行${srcdir}下的configure来完成的。其命令格式为(记得用你的真实路径替换${destdir}):

    命令格式为:

    % ${srcdir}/configure --prefix=${destdir} [其它选项] 

    但是其他选项如此多,怎么办?

    我参考了系统自带gcc-4.6.3的编译参数(使用gcc -v查看),然后将不相关的配置选项都删除了。

     最终我的配置为:

    $ ../gcc-4.2.3/configure --prefix=/usr/local/gcc-4.2.3 --enable-threads=posix 
    --disable-checking --enable--long-long --build=i686-linux-gnu 
    --host=i686-linux-gnu --target=i686-linux-gnu --with-system-zlib --enable-languages=c,c++,java
    
    

    6. 编译

    命令:

    $ make
    这是一个漫长的过程,并且可能出现N多错误,不要怕,有谷哥和度娘呢。

    晚上每个人编译的错误情况都不相同,我就将我所遇到的错误及解决办法帖出来,供大家参考。

    问题:
    a. 错误码:"java/jcf-io.c: cann't find zlib.h"?
    [Method]: 将/gcc-4.2.3/gcc/java下的jcf-io.c中的#include "zlib.h"
    修改为#include "../../zlib/zlib.h"

    b. 错误码:"/usr/bin/ld: cannot find -lz"?
    [Method]: 安装zlib-dev这个包,在线安装命令为:apt-get install zlib1g-dev。

    c. 错误码:"xgcc: java/parse-scan.c: No such file or directory"?
    [Method]:
    <1>安装bison: sudo apt-get install bison
    <2>进入gcc-4.2.3/gcc/java目录,因该目录有parse-scan.y
    执行bison -t -o parse-scan.c parse-scan.y


    7. 安装

    安装很简单:

    ~$ sudo make install


    8.替换系统自带gcc-4.6.3为我们新编译的gcc-4.2.3

    知识储备:GCC 4.6.3的所有文件,包括命令文件(如gcc、g++)、库文件等都在${destdir}目录下分别存放,如命令文件放在bin目录下、库文件在lib下、头文件在include下等。由于命令文件和库文件所在的目录还没有包含在相应的搜索路径内,所以必须要作适当的设置之后编译器才能顺利地找到并使用它们。


    8.1查看原来gcc所在路径

    ~$ which gcc
    /usr/bin/gcc
    
    原来的gcc命令在/usr/bin目录下。因此我们可以把GCC 4.6.3中的gcc、g++、gcj等命令在/usr/bin目录下分别做一个符号连接:

    (这里你可以根据你的需要链接gcc, g++, gcj)

     % cd /usr/bin
     % ln -s ${destdir}/bin/gcc-4.2 gcc
     % ln -s ${destdir}/bin/g++-4.2 g++
     % ln -s ${destdir}/bin/gcj-4.2 gcj 

    上述含义就是将gcc链接到gcc-4.2中。


    9. 测试

    使用gcc -v检查版本应该为gcc-4.2.3了。




    参考:

    参考资料1:

    1. http://blog.csdn.net/sstower/article/details/5624010

    2004年4月20日最新版本的GCC编译器3.4.0发布了。目前,GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。GCC 3.4.0比以前版本更好地支持了C++标准。本文以在Redhat Linux上安装GCC3.4.0为例,介绍了GCC的安装过程。

     安装之前,系统中必须要有cc或者gcc等编译器,并且是可用的,或者用环境变量CC指定系统上的编译器。如果系统上没有编译器,不能安装源代码形式的GCC 3.4.0。如果是这种情况,可以在网上找一个与你系统相适应的如RPM等二进制形式的GCC软件包来安装使用。本文介绍的是以源代码形式提供的GCC软件包的安装过程,软件包本身和其安装过程同样适用于其它Linux和Unix系统。

     系统上原来的GCC编译器可能是把gcc等命令文件、库文件、头文件等分别存放到系统中的不同目录下的。与此不同,现在GCC建议我们将一个版本的GCC安装在一个单独的目录下。这样做的好处是将来不需要它的时候可以方便地删除整个目录即可(因为GCC没有uninstall功能);缺点是在安装完成后要做一些设置工作才能使编译器工作正常。在本文中我采用这个方案安装GCC 3.4.0,并且在安装完成后,仍然能够使用原来低版本的GCC编译器,即一个系统上可以同时存在并使用多个版本的GCC编译器。

     按照本文提供的步骤和设置选项,即使以前没有安装过GCC,也可以在系统上安装上一个可工作的新版本的GCC编译器。

     1. 下载

     在GCC网站上(<a href="gcc.gnu/" target="_blank">gcc.gnu/</a>)或者通过网上搜索可以查找到下载资源。目前GCC的最新版本为 3.4.0。可供下载的文件一般有两种形式:gcc-3.4.0.tar.gz和gcc-3.4.0.tar.bz2,只是压缩格式不一样,内容完全一致,下载其中一种即可。

     2. 解压缩

     根据压缩格式,选择下面相应的一种方式解包(以下的“%”表示命令行提示符):

     % tar xzvf gcc-3.4.0.tar.gz
     或者
     % bzcat gcc-3.4.0.tar.bz2 | tar xvf -

     新生成的gcc-3.4.0这个目录被称为源目录,用${srcdir}表示它。以后在出现${srcdir}的地方,应该用真实的路径来替换它。用pwd命令可以查看当前路径。

     在${srcdir}/INSTALL目录下有详细的GCC安装说明,可用浏览器打开index.html阅读。

     3. 建立目标目录

     目标目录(用${objdir}表示)是用来存放编译结果的地方。GCC建议编译后的文件不要放在源目录${srcdir]中(虽然这样做也可以),最好单独存放在另外一个目录中,而且不能是${srcdir}的子目录。

     例如,可以这样建立一个叫 gcc-build 的目标目录(与源目录${srcdir}是同级目录):

     % mkdir gcc-build
     % cd gcc-build

     以下的操作主要是在目标目录 ${objdir} 下进行。

     4. 配置

     配置的目的是决定将GCC编译器安装到什么地方(${destdir}),支持什么语言以及指定其它一些选项等。其中,${destdir}不能与${objdir}或${srcdir}目录相同。

     配置是通过执行${srcdir}下的configure来完成的。其命令格式为(记得用你的真实路径替换${destdir}):

     % ${srcdir}/configure --prefix=${destdir} [其它选项]

     例如,如果想将GCC 3.4.0安装到/usr/local/gcc-3.4.0目录下,则${destdir}就表示这个路径。

     在我的机器上,我是这样配置的:

     % ../gcc-3.4.0/configure --prefix=/usr/local/gcc-3.4.0 --enable-threads=posix --disable-checking --enable--long-long --host=i386-redhat-linux --with-system-zlib --enable-languages=c,c++,java

     将GCC安装在/usr/local/gcc-3.4.0目录下,支持C/C++和JAVA语言,其它选项参见GCC提供的帮助说明。

     5. 编译

     % make

     这是一个漫长的过程。在我的机器上(P4-1.6),这个过程用了50多分钟。

     6. 安装

     执行下面的命令将编译好的库文件等拷贝到${destdir}目录中(根据你设定的路径,可能需要管理员的权限):

     % make install

     至此,GCC 3.4.0安装过程就完成了。

     6. 其它设置

     GCC 3.4.0的所有文件,包括命令文件(如gcc、g++)、库文件等都在${destdir}目录下分别存放,如命令文件放在bin目录下、库文件在lib下、头文件在include下等。由于命令文件和库文件所在的目录还没有包含在相应的搜索路径内,所以必须要作适当的设置之后编译器才能顺利地找到并使用它们。

     6.1 gcc、g++、gcj的设置

     要想使用GCC 3.4.0的gcc等命令,简单的方法就是把它的路径${destdir}/bin放在环境变量PATH中。我不用这种方式,而是用符号连接的方式实现,这样做的好处是我仍然可以使用系统上原来的旧版本的GCC编译器。

     首先,查看原来的gcc所在的路径:

     % which gcc

     在我的系统上,上述命令显示:/usr/bin/gcc。因此,原来的gcc命令在/usr/bin目录下。我们可以把GCC 3.4.0中的gcc、g++、gcj等命令在/usr/bin目录下分别做一个符号连接:

     % cd /usr/bin
     % ln -s ${destdir}/bin/gcc gcc34
     % ln -s ${destdir}/bin/g++ g++34
     % ln -s ${destdir}/bin/gcj gcj34

     这样,就可以分别使用gcc34、g++34、gcj34来调用GCC 3.4.0的gcc、g++、gcj完成对C、C++、JAVA程序的编译了。同时,仍然能够使用旧版本的GCC编译器中的gcc、g++等命令。

     6.2 库路径的设置

     将${destdir}/lib路径添加到环境变量LD_LIBRARY_PATH中,最好添加到系统的配置文件中,这样就不必要每次都设置这个环境变量了。

     例如,如果GCC 3.4.0安装在/usr/local/gcc-3.4.0目录下,在RH Linux下可以直接在命令行上执行或者在文件/etc/profile中添加下面一句:

     setenv LD_LIBRARY_PATH /usr/local/gcc-3.4.0/lib:$LD_LIBRARY_PATH

     7. 测试

     用新的编译命令(gcc34、g++34等)编译你以前的C、C++程序,检验新安装的GCC编译器是否能正常工作。

     8. 根据需要,可以删除或者保留${srcdir}和${objdir}目录。


    参考资料2:

    http://hi.baidu.com/zhujin2006/item/7426c74c75e680d3c1a59289

    由于项目需要,需要安装gcc4.0.2,其中的步骤参考gcc源代码里INSTALL目录下
    的安装说明,偶也是菜鸟,希望对初学者有所帮助吧,欢迎拍砖:)

    1.从gcc.gnu.org上下载了gcc4.0.2
    有这么几个文件:
    gcc-4.0.2.tar.bz2
    gcc-core-4.0.2.tar.bz2
    gcc-g++-4.0.2.tar.bz2
    gcc-java-4.0.2.tar.bz2
    gcc-testsuite-4.0.2.tar.bz2

    其中gcc-4.0.2.tar.bz2是包含了所有语言的包,包括(c,cpp,java,ada...),如
    果你只需要编译其中的若干语言,下载gcc-core-4.0.2.tar.bz2gcc的核心代码,再下
    载你需要的语言包就可以了。偶下了一个g++和java,还有一个
    gcc-testsuite-4.0.2.tar.bz
    2测试套件,不过偶下了没有用,节省编译时间呵:)

    2.解压gcc-core-4.0.2.tar.bz2到目录gcc-4.0.2,把gcc-g++-4.0.2.tar.bz2也解
    压到gcc-4.0.2目录里,放在一起编译。

    3.这里要注意:我们把源代码解压的目录叫做$srcdir,强烈建议再新建一个目录
    用作gcc编译的目录,叫做$objdir,这个目录不要是$srcdir的子目录,这里是gcc-bui
    ld。

    $ mkdir gcc-build
    $ cd gcc-build

    以下的操作都在$objdir里。

    4.configure
    这里我偷了一个懒,由于configure需要编译参数,偶参考了一
    下系统自带gcc的参数,gcc -v 查看

    $ gcc -v
    使用内建 specs。
    目标:i486-linux-gnu
    配置为:../src/configure -v --enable-languages=c,c++,java,f95,objc,ada,
    treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/
    usr/lib --without-included-gettext --enable-threads=posix --enable-nls -
    -program-suffix=-4.0 --enable-__cxa_atexit --enable-clocale=gnu --enable
    -libstdcxx-debug --enable-java-awt=gtk-default --enable-gtk-cairo --with
    -java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre --enable-mpfr --d
    isable-werror --with-tune=pentium4 --enable-checking=release i486-linux-
    gnu
    线程模型:posix
    gcc 版本 4.0.3 (Ubuntu 4.0.3-1ubuntu5)


    由于gcc不带uninstal功能,为了便于删除,把gcc安装在自己定义的目录下,这样
    把目录删除就可以删除gcc了。
    新建目录 /usr/local/gcc-4.0.2,把它叫做$installdir

    根据刚才gcc的参数,适当修改,我只需要g++,把关于java的参数都删掉了,进入
    $objdir
     $srcdir/configure --prefix=$installdir --enable-languages=c,c++ --enab
    le-shared --with-system-zlib --without-included-gettext --enable-threads
    =posix --enable-nls --program-suffix=-4.0 --enable-__cxa_atexit --enable
    -clocale=gnu --enable-libstdcxx-debug --enable-gtk-cario --enable-mffr -
    -disable-werror --with-tune=pentium4 --enable-checking=release i486-linu
    x-gnu

    这步生成makefile等文件

    5.编译
    $make bootstrap
    对源代码进行编译
    在我P4 2.8G的机器上用了大约半个小时的时间

    6.安装
    $make install
    安装gcc到$installdir下

    最后,查看为了使gcc命令调用自己编译的gcc,到/usr/bin下面把gcc链接到自己
    编译的gcc上面
    $cd /usr/bin
    $file gcc
    gcc: symbolic link to `gcc-4.0'
    $ln -fs $installdir/bin/gcc-4.0 gcc
    $gcc -v
    root@castalia:/usr/bin# gcc -v
    使用内建 specs。
    目标:i486-linux-gnu
    配置为:/home/zhuj/temp/gcc-4.0.2/configure --prefix=/usr/local/gcc-4.0
    .2/ --enable-languages=c,c++ --enable-shared --with-system-zlib --withou
    t-included-gettext --enable-threads=posix --enable-nls --program-suffix=
    -4.0 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug
     --enable-java-awt=gtk-default --enable-gtk-cario --enable-mffr --disabl
    e-werror --with-tune=pentium4 --enable-checking=release i486-linux-gnu
    线程模型:posix
    gcc 版本 4.0.2

    这样gcc就是我们自己编译的gcc了,如果需要系统原来的gcc,改变链接就ok了:)

    ps:
     呵呵 ,如果没有必要,当然不会从源代码编译
     其实偶的一个项目需要一个开源软件,在linux平台上只有源代码,需要编译,而它
    的readme里面指定要gcc4.0.2,偶试过,用4.0.0和4.1编译出来的都有问题,而
    ubuntu的源里有一个4.0.3和3.x系列的gcc,偶不得已才为之,有的源代码对系统
    条件是特别苛刻的,所以最好还是按照安装说明去安装,一开始偶就折腾了半天,
    浪费了n宝贵的时间,呵呵,教训也是经验吧



    参考资料3:

    http://xwsoul.com/posts/548

    最近在了解分布式文件系统, 看到了淘宝自己的开源分布式文件系统 tfs, 因为他要求编译最好是使用 4.1.2 版本的 gcc 编译, 因此需要安装此版本的 gcc.
    其他少说, 直接开始安装吧:

    1. 下载&解压源码

    $ wget http://ftp.gnu.org/gnu/gcc/gcc-4.1.2/gcc-4.1.2.tar.bz2
    $ tar xvjf gcc-4.1.2.tar.bz2
    

    2. 安装依赖库, 以及软件

    $ sudo apt-get install libc6-dev libgmp-dev libmpfr-dev texinfo

    3. 为头文件以及所需库添加链接
    添加如下链接, 这取决于你的 Ubuntu 系统架构, 如果你使用的是64位的ubuntu系统应当使用x86_64-linux-gnu替代i386-linux-gnu

    $ cd /usr/include
    $ sudo ln -s i386-linux-gnu/bits bits
    $ sudo ln -s i386-linux-gnu/gnu gnu
    $ sudo ln -s i386-linux-gnu/sys sys
    $ sudo ln -s i386-linux-gnu/asm asm
    $ cd /usr/lib
    $ sudo ln -s i386-linux-gnu/crt1.o crt1.o
    $ sudo ln -s i386-linux-gnu/crti.o crti.o
    $ sudo ln -s i386-linux-gnu/crtn.o crtn.o 
    

    4. 编译gcc

    $ cd gcc-4.1.2
    $ mkdir build
    $ cd build
    $ ../configure --prefix=/usr/local --program-prefix=sse- --libexecdir=/usr/local/lib --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --disable-multilib --enable-languages=c,c++
    $ make bootstrap
    

    如果出现了如下错误:

    WARNING: `makeinfo’ is missing on your system. You should only need it
    if you modified a `.texi’ or `.texinfo’ file, or any other file
    indirectly affecting the aspect of the manual. The spurious
    call might also be the consequence of using a buggy `make’ (AIX,
    DU, IRIX). You might want to install the `Texinfo’ package or
    the `GNU make’ package. Grab either from any GNU archive site.

    请使用以下命令编译:

    $ make bootstrap MAKEINFO=makeinfo

    5. 安装gcc

    $ make install
    $ cd /usr/local/bin
    $ ll *gcc*
    

    看到类似以下几个文件, 安装就完成了

    i686-pc-linux-gnu-gcc-4.1.2 i686-pc-linux-gnu-ssegcc ssegcc ssegccbug


    展开全文
  • avrgcc源代码

    2012-09-22 17:48:43
    这个包包含了所有avr-gcc的工具的源代码,可以分别进行编译的。
  • GCC源代码阅读

    千次阅读 2012-02-02 09:45:04
    获取GCC源代码 阅读源代码的第一步是获取源代码,巧妇难为无米之炊嘛! 使用以下任意方法均可获得gcc源代码: svn checkout svn://gcc.gnu.org/svn/gcc/trunk SomeLocalDir (摘自http://gcc.gnu.org/svn.html...

    获取GCC源代码

    阅读源代码的第一步是获取源代码,巧妇难为无米之炊嘛!

    使用以下任意方法均可获得gcc源代码:

    1. svn checkout svn://gcc.gnu.org/svn/gcc/trunk SomeLocalDir (摘自http://gcc.gnu.org/svn.html
    2. git clone git://gcc.gnu.org/git/gcc.git(摘自http://gcc.gnu.org/git/?p=gcc.git;a=summary

    需要注意的是,第二种方法得到的代码并非是svn的所有历史镜像。因为gcc的svn分支不是全部位于svn://gcc.gnu.org/svn/gcc/branches/这一层,其中如redhat或者google等实际起到名字空间的作用,再下一层才是真正的分支内容,然而svn到git转换的脚本不能识别这种情况,因此所有这类位于第二层的分支都不存在于git镜像中。

    当然对于初学者来说并不重要,我们只要盯住一个版本看就好了,比如4.5.2或者4.4.5(原本想等4.6发布之后再开始这个学习系列,目前看来一半时是等不到了)。由于我之前在4.4.5上有一点积累,因此如没有特别说明,这一系列的心得都是通过阅读4.4.5的代码而来。

    使用源代码交叉索引工具

    拿到源代码之后,建议使用代码交叉索引工具生成索引,方便阅读。常用的有etags(或者ctags)和cscope。

    etags

    gcc的Makefile里有生成TAGS文件的target,可以直接在编译目录下生成,如

    $ mkdir build
    $ cd build
    $ ../gcc/configure --enable-languages=c,c++,lto
    $ make
    $ make -k etags # OR `make -k tags'

    在Emacs里加载TAGS文件的方法是:M-x visit-tags-table

    cscope

    cscope的配置也不复杂,以下是在Ubuntu 10.10下安装配置步骤

    $ sudo apt-get install cscope cscope-el
    $ cd gcc
    $ gcc-cscope.sh

    gcc-cscope.sh脚本内容如下

    #!/bin/bash
    
    BUILD_DIR=${1:-../build/gcc}
    cscope-files.sh libiberty gcc include gcc/config/arm $BUILD_DIR >cscope.files
    if [ -f cscope.files ]
    then
        cscope -b -q -k
    else
        echo "cscope.files not found at $PWD."
        exit 1
    fi

    由于gcc的部分代码是在编译期生成的,所以除了索引源代码目录下的文件,还要索引编译目录下的文件(对应于BUILD_DIR这个变量所制订的目录,缺省为build/gcc,也可以通过参数使用其它目录)。

    由于gcc支持多种硬件平台,为避免混淆,我只选择了自己关心的ARM部分代码,其它后端代码忽略。

    cscope-files.sh脚本内容如下:

    #!/bin/bash
    
    for dir in "$@"
    do
        find "$dir" -maxdepth 1 -iname "*.[hc]" -type f
    done

    要想在Emacs里面使用cscope索引结果,需要安装cscope-el软件包,并把下面一行代码加入Emacs配置文件

    (require 'xcscope)

    具体使用方法可以参见/usr/share/emacs/site-lisp/xcscope.el文件内的注释。

    下载gcc源代码,编译通过,测试hello world之后,就可以开始认真阅读它的实现了。

    通常我们阅读的源代码,是开发过程中某一时刻的快照,在特定情况下,我们不仅需要理解它的当前实现方式,还要了解它的发展过程和原因。这时,我们可以借助版本管理工具、ChangeLog文件和邮件列表,来了解开发历史。

    取决于获取源代码的方式,可以使用的版本管理工具有subversion和git,熟练使用命令行工具或者图形化客户端是必须的,如果能和开发环境无缝结合就更完美了。Emacs默认的VC软件包支持多种版本管理工具,包括subversion和git。VC的操作对象是文件,如果想要了解整个项目的情况,可以安装psvn和magit。

    ChangeLog是个很有趣的东西,我一度对它的作用不太理解。有了版本控制工具,还要ChangeLog做啥?!而且ChangeLog的内容也很枯燥,它只记录了源代码的物理变化,比如增加了一个变量,并在哪个函数里使用;删除一个宏;或者改变函数调用关系等等。它并不记录做出这些改变的目的或原因。后来经jzhang918介绍,终于明白它对于版本管理工具的补充作用。通常,版本工具的操作对象是文件,因此,如果想知道某个函数(或者某个变量)发生了哪些变化,则相当棘手,ChangeLog的作用便在于此。

    仅有历史版本和ChangeLog还是不够的,它们缺少了一项非常重要的信息——为什么要做这样的修改。一般来说,最好能在提交日志上说明,但很少有gcc的开发者这么做,所以,就要靠邮件列表来帮忙了。通常来讲,在提交修改之前,都需要把patch发到gcc开发者所用的邮件列表上,供maintainer检查,通过后才能提交。在邮件里,作者会讲一点来龙去脉,不然maintainer一头雾水,patch就无法通过了。

    学习GCC源代码,离不开各种参考资料,如论文、wiki、手册和散落在邮件列表里面的讨论。

    如果没有理论背景知识,想从GCC源代码里看出它想要做什么,以及在做什么,是很困难的。因此,学习GCC实现的过程,必然伴随着不断地阅读论文。如果注释里面提到了参考论文(或书籍)的名字,不妨直接找来看看。另外一个非常重要的内容就是gcc summit,论文下载地址为http://gcc.gnu.org/wiki#GCC_Summit_Proceedings,包括从2003年至今的所有论文。

    gcc summit的论文不涉及太多的细节,所以看起来不像其它论文那么头疼,但是要学习具体的算法和实现,还是要找来相应的论文,啃硬骨头。论文看多了,如何管理也是个问题,不然看了等于白看,一会儿就还给作者了。尝试了两个网站CiteULikeConnotea,都不理想,似乎更像是社会化书签服务,对于我一地的PDF毫无帮助。最后还是用orgmode记录,以后再把RefTex集成进来

    要了解GCC的实现细节,还要看手册,Ubuntu下的安装方式如下:

    sudo apt-get install gcc-doc

    其中包括两个手册——使用手册和内部实现手册,查看方式分别为:

    info gcc
    info gccint

    手册不适合从头到尾看下来,需要的时候查找相应内容学习就可以了,最多粗读一遍获得大概的印象,依我的经验,基本就是看了后面忘了前面,反而是遇到问题再来查找更有针对性、更容易理解。由于gccint始终处于不完整状态,所以也不要期望太多,看代码是必不可少了。

    手册的在线地址为http://gcc.gnu.org/onlinedocs/

    最后的信息源就是gcc wiki邮件列表了,由于时效性的问题,上面的内容是否还适用,需要个人自行判断。邮件列表有多个,我个人关注的是gcc和gcc-patches,


    展开全文
  • 在Linux下进行C语言编程,必然要采用GNU GCC编译C源代码生成可执行程序。 一、GCC快速入门 Gcc指令的一般格式为:Gcc [选项] 要编译的文件 [选项] [目标文件] 其中,目标文件可缺省,Gcc默认生成可执行的文件...
  • 熟悉Linux环境编程的童鞋,对gcc一定不是很陌生,它可以高效地将C/C++代码编译成可执行文件。在嵌入式开发领域,gcc更是无比的强大,采用不同编译平台的gcc编译器,对应地就可以生成该平台的bin文件。由于gcc功能...
  • fft变换的gcc源代码

    2013-07-05 12:02:44
    这是快速傅立叶变换的gcc格式的源代码,包括变换和反变换,非常适合于linux用户的使用
  • 在Linux下进行C语言编程,必然要采用GNU GCC编译C源代码生成可执行程序。 一、GCC快速入门 Gcc指令的一般格式为:Gcc [选项] 要编译的文件 [选项] [目标文件] 其中,目标文件可缺省,Gcc默认生成可执行的文件...
  • 如果仅仅想借助eclipse平台开发一个C/C++ 的IDE,借助CDT还有GCC就可以做到。只是这样对源码编译之后生成的文件是exe文件。如果想生成elf以及bin文件应该怎么做呢?
  • GCC编译器的源代码

    2011-11-22 08:15:05
    GCC编译器的源代码GCC编译器的源代码GCC编译器的源代码GCC编译器的源代码GCC编译器的源代码GCC编译器的源代码GCC编译器的源代码
  • 获取GCC源代码

    千次阅读 2013-07-25 12:00:58
    3月22日,GCC 开发团队庆祝 GNU 编译器套裝(GNU Compiler Collection)25周年。当理查德·斯托曼在1987年宣布第一版 GCC 时,很少人会想到 GCC 如今能有这么广泛的影响。它塑造(prototype)了多种语言的特性(这些...
  • gcc 10.1.0 源代码

    2020-05-19 11:15:33
    gcc 10.1.0源代码,需要配置,可网上搜索配置方法 GUN编译器,用于基于Linux的系统编译C/C++程序
  •     该脚本实现的功能是:利用gcc编译器自动编译C/C++源代码生成可执行文件,并自动执行该程序。值得注意的是,编译后生成的可执行文件名以源代码文件名命令(不包含后缀),如果有多个源代码文件,生成的文件以第...
  • gcc-1.40 源代码

    热门讨论 2008-08-21 15:31:46
    早期GCC源代码,使用比较广泛的一个版本,来源于GCC官方ftp://gcc.gnu.org。
  • 源代码编译、安装gcc

    千次阅读 2013-03-19 12:57:43
    源代码编译、安装gcc 参考: http://www.comdyn.cn/from-web/68-server-setup/164-centos-48-gcc450.html 我的环境:CentOS 6.2, kernel 3.1.10 x86_64 需要的配置:Disk space >= 6GB, Mem >= 1GB ...
  • 如何汉化并编译 Python 源代码

    千次阅读 2019-11-12 07:47:50
    如何汉化并编译 Python 源代码前言参考文章我的工具关键字汉化其他源代码汉化Linux 下编译Windows 下编译汉化效果演示 前言 笔者是一名业余编程爱好者,年初偶然混进中文编程OO群。因觉得中文编程乃大势所趋,遂入了...
  • 编译gcc 4.9.1

    千次阅读 2014-10-11 15:59:36
    1. 获取源代码
  • 已经出版的相同选题的书:LEMON语法分析生成器(LALR(1))源代码情景分析       Bison是bash的语法分析器是gcc的语法分析器。 Linux其实是有三部分组成。 第一部分,内核(oldlinux论坛已有讨论和linux内核...
  • Windows下编译Ruby源代码

    千次阅读 2016-10-12 19:39:08
    为了在Windows下粘合Ruby扩展到应用程序,需要重新编译Ruby源代码,以便使用Visual Studio进行扩展的开发。使用第三方一键安装的版本开发工具使用的是Mingw下的GCC,无法满足需要。 源代码使用官网提供的源码包...
  • 让Notepad++调用GCC直接编译源代码

    千次阅读 2012-05-25 20:41:00
    原文链接:... vs2010下自己加上编译选项 /EHsc。另外感觉NppExec似乎没什么用啊? 对于刚学习C语言编程的新手来说,Visual Studio之类的庞然大物完全不适合他们。他们需要的只是一个简单的,即写即
  • gcc4.8.0源代码安装

    千次阅读 2013-05-14 15:40:50
    最近项目要修改gcc源代码,最新的gcc4.8放出,对c11的支持有进步,自然要在最新的gcc上动手,vm虚拟机上装了个ubuntu10.04,自带的gcc是4.4.3的。 先看了下ubuntu software center发现已经有gcc4.8可以直接下载...
  • AVR 分时系统,AVRGCC编译,mega16单片机调试通过 AVR 分时系统,AVRGCC编译,mega16单片机调试通过
  • 使用GCC编译代码(附编译过程)

    千次阅读 2009-09-12 10:26:00
    GCC是集成的,查看系统GCC版本的命令: gcc -v查看它的路径命令: which gcc下面开始使用GCC编译C语言代码1.使用Vim编写代码,还是使用上次(2009.6.5的)编译代码: #include int main() { print
  • 用cygwin编译qemu源代码

    千次阅读 2010-04-09 20:15:00
    官方网站推荐用msys编译qemu源代码,但在实际过程中发现用msys来编译跟踪qemu源代码有一些不方便的地方: 1. msys本身没有gdb调试工具,需要另外下载安装。2. msys 所带工具有限,比如目前没有集成dd工具,无法全面...
  • 安装GCC-8.2 sudo apt-get install build-essential libgmp-dev libmpfr-dev libmpc-dev wget http://mirror.linux-ia64.org/gnu/gcc/releases/gcc-8.2.0/gcc-8.2.0.tar.xz tar -Jxvf gcc-8.2.0.tar.xz cd gcc-8.2...
  • lrwxrwxrwx 1 root root 7 2011-11-01 23:56 /usr/bin/gcc -> gcc-4.6 -rwxr-xr-x 1 root root 224544 2011-10-06 05:47 /usr/bin/gcc-4.4 -rwxr-xr-x 1 root root 302104 2011-09-17 05:43 /usr/bin/gcc-...
  • 如何编译ipxe源代码

    千次阅读 2014-11-21 18:40:35
    最近一直在研究关于windows系统引导的技术,一开始是研究TrueCrypt的Boot模块,这是一个windows本地系统引导例子,可以通过vs进行编译。后来需要研究通过网络引导windows系统的技术,所以就找到了这个开源代码iPXE。...
  • 源代码获取 wget http://mirror.hust.edu.cn/gnu/gcc/gcc-6.5.0/gcc-6.5.0.tar.gz 编译依赖安装 sudo apt install libmpc-dev libgmp-dev libmpfr-dev 编译 tar -xf gcc-6.5.0.tar.gz cd gcc-6.5.0

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 109,578
精华内容 43,831
关键字:

编译gcc源代码慢