最近研究网络编程,最后发现还是unix/linux下相关资源比较多,研究起来方便,所以最近在安装相关开发环境,第一步当然是安装gcc。用rpm包安装,我想很多人会,没什么好说的。这里介绍从源代码编译安装,我的安装平台为Fedora11-x86_64。
首先当然是下载相关源代码了。我下载了gmp-4.3.2.tar.bz2,mpfr-2.4.2.tar.bz2,gcc-4.4.3.tar.bz2这三个包。gcc大家都认识,gmp,mpfr这两个是gcc依赖的,官方描述为。
GMP is a free library for arbitrary precision arithmetic, operating on signed integers,rational numbers, and floating point numbers。
The MPFR library is a C library for multiple-precision floating-point computations with correct rounding。
这三个包中,先安装gmp,再安装mpfr,再安装gcc。不知道有没有人会疑惑,这里要编译这么多源代码,其中包括gcc这个编译器工具,那在编译安装gcc前用什么来编译这些源代码呢?我用的还是gcc。。。这里就是编译原理中的自举(bootstrap)概念了,就是用低级编译器编译高级编译器。我用的是gcc-4.4.0编译安装gcc-4.4.3。事实上,在编译gcc时,默认情况下会编译三次(3 stage),即完成第一次编译后生成stage1编译器,然后用stage1编译器再次编译生成stage2编译器,第三次用stage2编译器编译生成stage3编译器,最后比较stage2编译器和stage3编译器是否一样,来判断编译结果是否正确。
linux下编译安装主要包括两个过程configure和make,其实具体的功能我也还没仔细研究,大家去看官方文档吧:(。这里只是介绍个大概。congfiure会根据用户指定的参数生成MakeFile,然后make命令会根据MakeFile编译整个源代码。
在具体操作前先了解下目录结构。一般情况下需要三个目录,源代码包解压会产生一个源代码目录srcdir,编译过程中用来存放中间文件的目标目录objdir,编译完成后的安装目录installdir。要注意的是objdir不能作为srcdir的子目录,反之亦不行。好了,我们开始操作吧。
对于gmp,我们先用如下命令将源代码包解压。
tar -xjvf gmp-4.3.2.tar.bz2
参数中j指定解压方式(压缩也一样)为bzip2,如果是.gz后缀的压缩包,则用g指定解压方式为gzip。解压后生成源代码目录为gmp_srcdir。
然后进入gmp的目标目录gmp_objdir。
$ cd gmp_objdir
然后用如下命令进行configure。
$ gmp_srcdir/configure --prefix=gmp_installdir --enable-shared
--prefix和--enable为configure中两种常用参数,其它还有--disable,--with等,后面会用到。--prefix=gmp_installdir用来将gmp_installdir指定为安装目录,--enable-shared用来生产共享库。
configure成功后,gmp_objdir下会生产MakeFile。然后用make命令编译。
$ make
一般情况下,只要configure指定的参数正确,make过程都会成功。不过还是要验证一下,一般安装包都会提供测试用例,用如下命令测试。
$ make check
测试通过后,用如下命令安装。
$ make install
这样gmp就被成功安装到gmp_installdir。
gmp安装成功后,继续安装mpfr,不过mpfr依赖gmp,所以configure会需要--with参数,命令如下。
mpfr_srcdir/configure --prefix=mpfr_installdir --with-gmp=gmp_installdir --enable-shared
参数中--with-gmp=gmp_installdir用来指定mpfr安装过程中所需的gmp包的安装目录。剩下的步骤跟gmp一样,就不赘述了。
最后安装gcc,用如下命令进行configure。
gcc_srcdir/configure --prefix=gcc_install --enable-threads=posix --enable-shared --disable-multilib --disable-checking --enable-languages=c,c++,Java --with-gmp=gmp_installdir --with-mpfr=mpfr_installdir
参数中--enable-threads=posix指定 POSIX/Unix98作为线程支持库,这个很重要。--disable-checking用来关闭一些内部检查以减少编译时间。事实上,就像前面介绍的,你也可以加上--disable-bootstrap参数来取消3-stage编译,这样可以节省很多时间,不过为了编译正确,不推荐这样做。参数--enable-languages=c,c++,java用来指定编译器支持的语言。对于我使用的fedora-x86_64,最好加上--disable-multilib参数,不然你可能遇到gnu/stubs-32.h: No such file or directory错误。这个参数是用来取消多目标库编译的,即取消32位库编译,因为我的linux没有编译32位库需要的文件。。。
同样,configure正确后,进行make编译,最后进行make install安装。不同的平台,不同的参数会引起不同的问题,遇到问题最好的解决办法当然是查看官方说明。。。最后祝大家安装顺利:)。