分类: LINUX
2014-06-12 18:46:20
我是通过下载的。
1.2解压
$ tar xvjf gcc-4.1.2.tar.bz2
1.3 建立目录
假设你解压到的目录为: ~/home/hwh/gcc-4.2.3,那么我们就用${srcdir}表示它。
我们同时需要建立一个目标目录${objdir}用来存放编译结果的地方,GCC建议编译后的文件不要放在源目录${srcdir]中(虽然这样做也可以),最好单独存放在另外一个目录中,而且不能是${srcdir}的子目录。我们这里在建立一个objdir为: ~/home/hwh/gcc-4.2.3obj
同时我们还需要建立一个安装目录,就是防止编译后的头文件,库文件,和可执行文件。
一般为/usr/local/gcc-4.2.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
这个需要根据里面的要求下载依赖库。
上面我安装了常规需要依赖的库。
4. 为头文件以及所需库添加链接
添加如下链接, 这取决于你的 Ubuntu 系统架构, 如果你使用的是64位的ubuntu系统应当使用x86_64-linux-gnu替代i386-linux-gnu
[这里需要了解一下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}):
命令格式为:
但是其他选项如此多,怎么办?
我参考了系统自带gcc-4.6.3的编译参数(使用gcc -v查看),然后将不相关的配置选项都删除了。
最终我的配置为:
6. 编译
命令:
这是一个漫长的过程,并且可能出现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
d.错误码:"/.libs/libgcj.so: undefined reference to `__cxa_call_unexpected' collect2: ld returned 1 exit status"
替换 libjava/prims.cc这个文件
7. 安装
安装很简单:
8.替换系统自带gcc-4.6.3为我们新编译的gcc-4.2.3
知识储备:GCC 4.6.3的所有文件,包括命令文件(如gcc、g++)、库文件等都在${destdir}目录下分别存放,如命令文件放在bin目录下、库文件在lib下、头文件在include下等。由于命令文件和库文件所在的目录还没有包含在相应的搜索路径内,所以必须要作适当的设置之后编译器才能顺利地找到并使用它们。
8.1查看原来gcc所在路径
原来的gcc命令在/usr/bin目录下。因此我们可以把GCC 4.6.3中的gcc、g++、gcj等命令在/usr/bin目录下分别做一个符号连接:
(这里你可以根据你的需要链接gcc, g++, gcj)
上述含义就是将gcc链接到gcc-4.2中。
9. 测试
使用gcc -v检查版本应该为gcc-4.2.3了。