最近在搞点研究,在ubuntu Server上用gcc编译一个比较小众的软件,然后你懂得,万恶的版本问题啊!只能乖乖的手动编译低版本的gcc了 ~
首先,介绍一下手动编译过程中的一些版本问题,并且强烈建议不要随意更换版本!
操作系统:Ubuntu Server 12.04.4 64bit(安装在虚拟机中)
gcc:编译前版本4.4.3,编译后版本4.5.1
安装GCC需要使用到3个辅助的软件包,分别为gmp、mpfr、mpc,到官网下载最新版即可:
gmp:http://gmplib.org、http://ftp.gnu.org/gnu/gmp/(我使用的版本5.1.1)
mpfr:http://www.mpfr.org、http://ftp.gnu.org/gnu/mpfr/(我使用的版本3.1.1)
mpc: http://www.multiprecision.org(我使用的版本1.0.1)
m4:
sudo apt-get install m4
即可。
另外,还需要安装2两个额外的软件,就是g++-multilib和zip:
$ sudo apt-get install g++-multilib zip
1.1 安装GMP
因为MPFR和MPC都依赖于GMP包,所以首先安装GMP。
$ tar -xvf gmp-5.1.1.tar.bz2
建议:在Linux下手动编译软件时,要养成建立build目录的好习惯,所以建立一个gmp-1.0.1-build目录
$ mkdir gmp-5.1.1-build $ cd gmp-5.1.1-build $./../gmp-5.1.1/configure (可以使用配置参数--prefix=指定安装位置,这里使用默认 /usr/local/include 和/usr/local/lib) $make $make check (这一步用来确保编译正确) $sudo make install
如果在执行configure的时提示错误:
checking forsuitable m4... configure: error: No usable m4 in$PATH or /usr/5bin
说明我们还要安装m4这个库。
sudo apt-get install m4
检查GMP是否安装成功:
$ ls /usr/local/lib/libgmp*
出现以下表示成功了:
/usr/local/lib/libgmp.a /usr/local/lib/libgmp.so.10 /usr/local/lib/libgmp.la /usr/local/lib/libgmp.so.10.0.5 /usr/local/lib/libgmp.so |
1.2 安装MPFR
$ tar -xvf mpfr-3.1.1 $ mkdir mpfr-3.1.1-build $ cd mpfr-3.1.1-build $ ./../mpfr-3.1.1/configure --with-gmp-include=/usr/local/include --with-gmp-lib=/usr/local/lib (由于mpfr依赖于gmp这个库,所以在configure时,需要设置好gmp库所在的位置,供安装mpfr库时使用。) $ make $ make check(不知什么原因,在这一步的make check报告出错,说gmp找不到,可以暂时不理,因为依旧可以安装成功) $ sudomakeinstall
1.3 安装MPC
$ tar -xvf mpc-1.0.1 $ mkdir mpc-1.0.1-build $ cd mpc-1.0.1-build $ ./../mpc-1.0.1/configure --with-gmp-include=/usr/local/include --with-gmp-lib=/usr/loca/lib --with-mpfr-include=/usr/local/include --with-mpfr-lib=/usr/loca/lib
$ make
$ sudo make install
1.4 设置环境变量
需要的库都安装完后,为了防止编译gcc时找不到这三个库,所以需要确认库位置是否在环境变量中 LD_LIBRARY_PATH中
$ echo $LD_LIBRARY_PATH
如果没有的话,手动添加即可
1.4.1 临时办法
$ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
1.4.2 永久办法
为了以后使用的时候不再设置,可以修改/etc/bashprofile或者/etc/profile。这里修改的是全局变量,对所有用户有效,
修改~/.bashprofile 和~/.profile可以修改用户的全局变量。
$ sudo vim /etc/profile
在文件末尾添加以下两句:
export LD_LIBRARY_PATH=/usr/local/libLD_LIBRARYPATH=:/usr/local/gcc-4.7.2/lib:$LD_LIBRARYPATH
保存退出
$ source /etc/profile
二、开始安装GCC
最好是在gcc-4.5.1平级的目录中建一个gcc-build目录,以防编译失败导致的问题。编译过程很传统,但比较缓慢,由于我将gmp、mpfr、mpc都安装在了/usr/local目录中,所以需要这样配置:
$ ../gcc-4.5.1/configure --prefix=/usr --with-gmp=/usr/local --with-mpfr=/usr/local --with-mpc=/usr/local
这里建议大家一定要选择prefix为/usr,因为Ubuntu中apt-get安装的gcc就在这里,如果按照默认的/usr/local那么原来的gcc 4.4就还不会被完全更新,会造成很多不必要的麻烦。
这个过程会非常缓慢(或许是我用的虚拟机),需要几个小时,请做好心理准备~
安装完成后,
gcc -v
显示如下界面标注安装成功~
四、最后,随便编写一个小程序,使用gcc来测试一下吧!