ubuntu16.04编译gcc-5.4.0源代码

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


简介:

由于要移植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  



猜你喜欢

转载自blog.csdn.net/renjiewen1995/article/details/53164591
今日推荐