安装环境:Ubuntu10.04,Gcc-4.4.3
安装gcc-4.4.1
1. 网站http://gcc.gnu.org上下载文件gcc-4.4.1.tar.bz2,假设下载目录为/home/wkx。
2. 在当前目录(/home/wkx)解压缩,在命令行tar -jxvf gcc-4.4.1.tar.bz2。
3. 对源文件进行配置,
mkdir gcc-build // 用于安装的临时文件,安装完毕后可以删除
mkdir gcc // gcc的安装目录
cd gcc-build
../gcc-4.4.1/configure –prefix=/home/wkx/gcc –enable-threads –disable-checking –enable-long-long –with-system-zlib –enable-language=c,c++,java
这一步会出现一个错误,configure: error: Building GCC requires GMP 4.1+ and MPFR 2.3.0+。
原因是:GCC now requires the GMP, MPFR and MPC packages. As these packages may not be included in your host distribution, they will be built with GCC.
4. 网上下载MP 4.1+ and MPFR 2.3.2+。
Unpack each package into the GCC source directory and rename the resulting directories so the GCC build procedures will automatically use them: (把gmp和mpfr解压之后的文件夹改名为gmp和mpfr,然后移动到gcc源码文件夹里面就可以了)
cd ../gcc-4.4.1
tar -jxf ../mpfr-3.1.0.tar.bz2
mv -v mpfr-3.1.0 mpfr
tar -jxf ../gmp-5.0.2.tar.bz2
mv -v gmp-5.0.2 gmp
tar -zxf ../mpc-0.9.tar.gz
mv -v mpc-0.9 mpc
5. 重新对源文件进行配置:
cd ../gcc-build
../gcc-4.4.1/configure –prefix=/home/wkx/gcc –enable-threads –disable-checking –enable-long-long –with-system-zlib –enable-language=c,c++,java
直到出现:MakeFile证明成功
configure: creating ./config.status
config.status: creating Makefile
6. 编译Gcc
make
安装过程中遇到错误:
../../gcc4.4.1/gcc/java/jcf-io.c -o java/jcf-io.o
../../gcc4.4.1/gcc/java/jcf-io.c:39:18: 错误: zlib.h:没有那个文件或目录
../../gcc4.4.1/gcc/java/jcf-io.c: 在函数‘read_zip_member’中:
../../gcc4.4.1/gcc/java/jcf-io.c:198: 错误: ‘Z_NO_COMPRESSION’未声明(在此函数内第一次使用)
../../gcc4.4.1/gcc/java/jcf-io.c:198: 错误: (即使在一个函数内多次出现,每个未声明的标识符在其
../../gcc4.4.1/gcc/java/jcf-io.c:198: 错误: 所在的函数内也只报告一次。)
../../gcc4.4.1/gcc/java/jcf-io.c:211: 错误: ‘z_stream’未声明(在此函数内第一次使用)
../../gcc4.4.1/gcc/java/jcf-io.c:211: 错误: expected ‘;’ before ‘d_stream’
../../gcc4.4.1/gcc/java/jcf-io.c:212: 错误: ‘d_stream’未声明(在此函数内第一次使用)
../../gcc4.4.1/gcc/java/jcf-io.c:212: 错误: ‘alloc_func’未声明(在此函数内第一次使用)
../../gcc4.4.1/gcc/java/jcf-io.c:212: 错误: expected ‘;’ before numeric constant
../../gcc4.4.1/gcc/java/jcf-io.c:213: 错误: ‘free_func’未声明(在此函数内第一次使用)
../../gcc4.4.1/gcc/java/jcf-io.c:213: 错误: expected ‘;’ before numeric constant
../../gcc4.4.1/gcc/java/jcf-io.c:214: 错误: ‘voidpf’未声明(在此函数内第一次使用)
../../gcc4.4.1/gcc/java/jcf-io.c:214: 错误: expected ‘;’ before numeric constant
../../gcc4.4.1/gcc/java/jcf-io.c:230: 警告: 隐式声明函数‘inflateInit2’
../../gcc4.4.1/gcc/java/jcf-io.c:230: 错误: ‘MAX_WBITS’未声明(在此函数内第一次使用)
../../gcc4.4.1/gcc/java/jcf-io.c:231: 警告: 隐式声明函数‘inflate’
../../gcc4.4.1/gcc/java/jcf-io.c:231: 错误: ‘Z_NO_FLUSH’未声明(在此函数内第一次使用)
../../gcc4.4.1/gcc/java/jcf-io.c:232: 警告: 隐式声明函数‘inflateEnd’
make[3]: *** [java/jcf-io.o] 错误 1
make[3]:正在离开目录 `/home/wkx/gcc-bulit/gcc'
make[2]: *** [all-stage2-gcc] 错误 2
make[2]:正在离开目录 `/home/wkx/gcc-bulit'
make[1]: *** [stage2-bubble] 错误 2
make[1]:正在离开目录 `/home/wkx/gcc-bulit'
make: *** [all] 错误 2
原因很简单是因为--with-system-zlib,当然要你装好zlib ,特别是 zlib 的开发包了,一般是 zlib-devel,解决方法:去掉该选项即可。
7. 重新对源文件进行配置:
cd ../gcc-build
../gcc-4.4.1/configure –prefix=/home/wkx/gcc –enable-threads –disable-checking –enable-long-long –enable-language=c,c++,java
直到出现:MakeFile证明成功
configure: creating ./config.status
config.status: creating Makefile
8. 重新进行编译gcc。
直接make,一定会出错
make[2]: 正在进入目录 `/home/wkx/gcc-bulit'
make[3]: 正在进入目录 `/home/wkx/gcc-bulit'
rm -f stage_current
make[3]:正在离开目录 `/home/wkx/gcc-bulit'
Comparing stages 2 and 3
warning: ./cc1plus-checksum.o differs
warning: ./cc1obj-checksum.o differs
warning: ./cc1-checksum.o differs
Bootstrap comparison failure!
./varasm.o differs
./crtendS.o differs
./i386.o differs
./crtbeginS.o differs
./gcc.o differs
make[2]: *** [compare] 错误 1
make[2]:正在离开目录 `/home/wkx/gcc-bulit'
make[1]: *** [stage3-bubble] 错误 2
make[1]:正在离开目录 `/home/wkx/gcc-bulit'
make: *** [all] 错误 2
解决方法:
make distclean
../gcc-4.4.1/configure –prefix=/home/wkx/gcc –enable-threads –disable-checking –enable-long-long –enable-language=c,c++,java
make
只要不提示有错误,就是安装成功。
9. 安装Gcc
直接输入命令:make install
make[4]: Leaving directory `/home/wkx /gcc-built/i686-pc-linux-gnu/libgomp'
make[3]: Leaving directory `/home/wkx /gcc-built/i686-pc-linux-gnu/libgomp'
make[2]: Leaving directory `/home/wkx /gcc-built/i686-pc-linux-gnu/libgomp'
make[1]: Leaving directory `/home/wkx /gcc-built'
安装成功。
10. 检测gcc
在命令行输入wkx@wkx-desktop:~/myfile/gcc-4.4.1/bin$ ./gcc -v,出现了如下面所示的结果,证明gcc可以正常工作。
# 使用内建 specs。
# 目标:i686-pc-linux-gnu
# 配置为:../gcc4.4.1/configure --prefix=/home/wkx/myfile/gcc-4.4.1 --enable-threads --disable-checking --enable-long-long --enable-language=c,c++,java
# 线程模型:posix
# gcc 版本 4.4.1 (GCC)
可以写个HelloWorld小程序验证一下。
11. 设置环境变量(本部分复制过来,没有验证)
Ø 先查看gcc所在的路径
Which gcc
Ø 再执行以下命令:
Cd /usr/bin
Ln –s $(安装路径)/bin/gcc gcc4
Ln –s $(安装路径)/bin/g++ g++4
Ln –s $(安装路径)/bin/gcj gcj4
Ø 库路径的设置
最好添加到系统的配置文件中,这样就不必要每次都设置这个环境变量了,在文件$HOME/.bash_profile中添加下面两句:
LD_LIBRARY_PATH=(安装路径)/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
建立好连接以后,可以通过以下几个命令查看是否建立成功:
Ls *4
Ls –l *4
Gcc4
小生初来研究Gcc,如果有什么问题大家一起讨论