前言:
这次我在Ubuntu 12.04 LTS 64位版上更新gcc,发现了原来的一些问题,这次没有什么时间上的压力,我比较认真地去查阅了官方文档,也参考了一些网上的帖子,对整个升级过程在依赖包的安装、不同Linux流派、32和64位下的区别和共同点有了更深的认识。
现总结如下:
PS:不标注出处的转载是可耻的。
(如果你很忙的话,可以只把里面的shell代码复制出来执行)
基本过程:
流程:
一,安装依赖库与工具
工具:
1.
apt-get
install
build-essential
1.
apt-get
install
gcc g++
make
libc6-dev
的方式来安装,以避免一些恶心的问题,还可以确保相应工具的安装。
库:
操作:
1.
locate
libXXX
2,安装(如果第一步发现某个库已经装了自然就不用再装啦):
1.
./contrib/download_prerequisites
来下载并解压,并创建符号连接。(如果下载缓慢,可以修改脚本中的下载地址到其他gnu镜像,注意修改版本号,根据官网的说明更高的版本不会引发其他问题)
1.
apt-get intall libisl-dev libcloog-isl3
在具体环境下可能需要修改库的名字,这一点可以通过在输入完libisl或libcloog后按两下Tab键来查看,后同。
1.
apt-get
install
gcc-multilib g++-multilib
Fedora下可以使用:
1.
apt-get
install
glibc-devel.i686 libstdc++-devel.i686
Ubuntu下也可以借鉴这个模式,修改包名安装相应的包。
二,配置(configure)
1,建立编译目录
1.
mkdir
build
2.
cd
build
2,配置
--with-gmp
--with-mpfr
--with-mpc
--with-isl
--with-cloog
--with-gmp-include
--with-gmp-lib
1.
../configure --prefix=/usr/
local
--disable-multilib --
enable
-languages=c,c++
1.
../configure --prefix=/usr --
enable
-languages=c,c++ --with-gmp=/usr/gmp-5.1.3
3,检查
三,编译(make)
1.
sudo
make
-j4
对于更好的机器-j后面的数字可以更大一些。
1.
sudo
make
install
install的路径是在configure的时候配置的。
1,gcc 不支持make unintall,覆盖请谨慎。
如果希望共存两个版本的gcc,使用的时候自然可以通过输入完整路径来致命调用哪个gcc,但是这样比较复杂。
建议通过update-alternatives 来让系统知道当我们只输入gcc的时候,是希望调用哪一个(关于update-alternatives的详细用法请百度):
例如我的gcc的路径为/usr/local/bin/gcc,我给它一个100的优先级:
1.
sudo
update-alternatives --
install
/usr/bin/gcc gcc /usr/
local
/bin/gcc 100
然后通过
1.
sudo
update-alternatives --config gcc
来查看两个gcc中系统选中了哪个(auto情况下是选中优先级高的),如果auto选中的不是我们要的,可以增加优先级或者手工制定默认的。
在其他Linux版本:
在升级gcc个过程中,主要区别就在于包的名字和包管理器的不同。
Ubuntu系(Debian)的包名和RedHat系(CentOS、Fedora)的在命名规则上不太一样。前缀洗好加版本号,开发版缩写为“dev”,用“-”连接架构;而后者的开发版缩写为”devel“,用”.“连接架构。
例如在安装32位的glibc的时候所使用的报名:
On Ubuntu: libc6-dev-i386.
On Red Hat distros: glibc-devel.i686
On CentOS 5.8: glibc-devel.i386
On CentOS 6.3: glibc-devel.i686
其次Ubuntu系有很多整合了的包,例如g++-multilib,build-essential等,而ReadHat系没有。
原载于http://blog.csdn.net/yanxiangtianji