Road Ahead

最近研究网络编程,,最后发现还是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 MPFRlibrary 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: Nosuch fileor directory错误。这个参数是用来取消多目标库编译的,即取消32位库编译,因为我的linux没有编译32位库需要的文件。。。

同样,configure正确后,进行make编译,最后进行make install安装。不同的平台,不同的参数会引起不同的问题,遇到问题最好的解决办法当然是查看官方说明。。。最后祝大家安装顺利:)。

Update in 1月3号 2015

1) 编译gcc前需安装build-essential, bison, flex。

2) 编译gmp, mpfr后,如果其被安装在非默认lib目录,需要设置LD_LIBRARY_PATH至相应lib目录路径

3) 编译gcc-4.4.7需要ppl, clong-ppl,编译ppl需要在编译gmp时,增加–enable-cxx选项

4) 编译gcc前需设置C_INCLUDE_PATH和CPLUS_INCLUDE_PATH,指向/usr/include/x86_64-linux-gnu/。设置LIBRARY_PATH,指向/usr/lib/x86_64-linux-gnu/。否则,可能出现找不到predefs.h,或crtio1.o文件的错误

版权声明:本文为博主原创文章,未经博主允许不得转载。

更有一种逍遥,浑然忘我,与大自然交融的境界令人心弛神往。

Road Ahead

相关文章:

你感兴趣的文章:

标签云: