【真】Linux升级GCC 4.8.1清晰简明教程(Ubuntu 12.04 64位版为例)
source link: https://blog.csdn.net/yanxiangtianji/article/details/12511961
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
上次在CentOS 6上升级GCC 4.7.2的教程(http://blog.csdn.net/yanxiangtianji/article/details/8365630)由于本人但是能力有限,而且时间比较紧,很多东西没有深究,导致教程里面有一些冗杂和不太正确或不能通用的部分,(还被师妹说我有意误导她,冤枉啊),向大家道歉。
这次我在Ubuntu 12.04 LTS 64位版上更新gcc,发现了原来的一些问题,这次没有什么时间上的压力,我比较认真地去查阅了官方文档,也参考了一些网上的帖子,对整个升级过程在依赖包的安装、不同Linux流派、32和64位下的区别和共同点有了更深的认识。
现总结如下:
PS:不标注出处的转载是可耻的。
(我整理了Ubuntu 12.04下的shell命令,如果你很忙的话,可以只把里面的shell代码复制出来执行)
基本过程:
一,安装依赖库与工具
apt-get install build-essential
apt-get install gcc g++ make libc6-dev
的方式来安装,以避免一些恶心的问题,还可以确保相应工具的安装。
locate libXXX
2,安装(如果第一步发现某个库已经装了自然就不用再装啦):
./contrib/download_prerequisites
来下载并解压,并创建符号连接。(如果下载缓慢,可以修改脚本中的下载地址到其他gnu镜像,注意修改版本号,根据官网的说明
更高的版本不会引发其他问题)
apt-get intall libisl-dev libcloog-isl3
在具体环境下可能需要修改库的名字,这一点可以通过在输入完libisl或libcloog后按两下Tab键来查看,后同。
apt-get install gcc-multilib g++-multilib
Fedora下可以使用:
apt-get install glibc-devel.i686 libstdc++-devel.i686
Ubuntu下也可以借鉴这个模式,修改包名安装相应的包。
二,配置(configure)
1,建立编译目录
mkdir build
cd build
--with-mpfr
--with-mpc
--with-isl
--with-cloog
--with-gmp-include
--with-gmp-lib
../configure --prefix=/usr/local --disable-multilib --enable-languages=c,c++
../configure --prefix=/usr --enable-languages=c,c++ --with-gmp=/usr/gmp-5.1.3
三,编译(make)
sudo make -j4
对于更好的机器-j后面的数字可以更大一些(有说法是CPU核心数的两倍,但实测表明gcc的编译工作的可并行度不是很高)。
sudo make install
将编译好的可执行文件install到configure时候配置的路径里面。
1,gcc 不支持make unintall,覆盖请谨慎。
四,后继工作
如果希望共存两个版本的gcc,使用的时候自然可以通过输入完整路径来致命调用哪个gcc,但是这样比较复杂。
建议通过update-alternatives 来让系统知道当我们只输入gcc的时候,是希望调用哪一个(关于update-alternatives的详细用法请百度):
例如:我新编译的gcc的路径为/usr/local/bin/gcc,我给它一个值为100的优先级:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/gcc 100
然后通过
sudo update-alternatives --config gcc
来查看两个gcc中系统选中了哪个(auto情况下是选中优先级高的),如果auto选中的不是我们要的,可以增加优先级或者手工制定默认的。
Ubuntu下的shell命令总结:
sudo apt-get install gcc g++ make
sudo apt-get install libisl-dev libcloog-isl-dev
#若希望在64位系统下编译出32位应用程序(反之亦然),需要执行下面命令
sudo apt-get install gcc-multilib g++-multilib
sudo ./contrib/download_prerequisites
sudo mkdir build
cd build
sudo ../configure --enable-languages=c,c++
sudo make -j4sudo make install
在其他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
转载请注明出处
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK