CentOS6.5手动升级gcc4.8.2
一、简易安装
操作环境 CentOS6.5 64bit,原版本4.4.7,不能支持C++11的特性~,希望升级到4.8.2
不能通过yum的方法升级,需要自己手动下载安装包并编译
本文记录了在CentOS上编译安装gcc 4.8.4的过程。
1、安装依赖三大件
按顺序安装gmp、mpfr、mpc,注意要都是disable share
Shell
|
1
2
3
4
5
|
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.gz
tar -xzvf gmp-4.3.2.tar.gz
./configure --enable-shared=no
make -j4
sudo make install
|
Shell
|
1
2
3
4
5
6
7
|
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
tar -xjvf mpfr-2.4.2.tar.bz2
cd mpfr-2.4.2
./configure --enable-shared=no
make -j4
sudo make install
|
Shell
|
1
2
3
4
5
6
|
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
tar -xzvf mpc-0.8.1.tar.gz
cd mpc-0.8.1
./configure --disable-shared
make -j2
sudo make install
|
上述步骤也可以有偷懒的方法:让gcc自动下载并编译。
|
1
2
|
cd gcc-4.8.4
./contrib/download_prerequisites
|
2、编译gcc
Shell
|
1
2
3
4
5
6
7
|
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.8.4/gcc-4.8.4.tar.gz
tar -xzvf gcc-4.8.4.tar.gz
cd gcc-4.8.4
./configure --prefix=/home/coder4/soft/gcc4.8.4 --with-mpfr-lib=/usr/local/lib --enable-languages=c,c++ --disable-multilib
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
make -j4
make install
|
补充一下,上面的LD_LIBRARY_PATH很重要,如果不指定,make会出奇奇怪怪的错误。
1.1 获取安装包并解压
wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2
tar -jxvf gcc-4.8.2.tar.bz2
当然,http://ftp.gnu.org/gnu/gcc 里面有所有的gcc版本供下载,最新版本已经有4.9.2啦.
1.2 下载供编译需求的依赖项
参考文献[1]中说:这个神奇的脚本文件会帮我们下载、配置、安装依赖库,可以节约我们大量的时间和精力。
cd gcc-4.8.0
./contrib/download_prerequisites
1.3 建立一个目录供编译出的文件存放
mkdir gcc-build-4.8.2
cd gcc-build-4.8.2
1.4 生成Makefile文件
./configure --prefix=/soft/gcc4.8.4 --enable-checking=release --enable-languages=c,c++ --disable-multilib
1.5 编译(注意:此步骤非常耗时)
make -j4
-j4选项是make对多核处理器的优化,如果不成功请使用 make,相关优化选项可以移步至参考文献[2]。
我在安装此步骤时候出错,错误描述:

compilation terminated.
make[5]: *** [_gcov_merge_add.o] 错误 1
make[5]: Leaving directory `/home/imdb/gcc-4.8.2/gcc-build-4.8.2/x86_64-unknown-linux-gnu/32/libgcc'
make[4]: *** [multi-do] 错误 1
make[4]: Leaving directory `/home/imdb/gcc-4.8.2/gcc-build-4.8.2/x86_64-unknown-linux-gnu/libgcc'
make[3]: *** [all-multi] 错误 2
make[3]: *** 正在等待未完成的任务....
make[3]: Leaving directory `/home/imdb/gcc-4.8.2/gcc-build-4.8.2/x86_64-unknown-linux-gnu/libgcc'
make[2]: *** [all-stage1-target-libgcc] 错误 2
make[2]: Leaving directory `/home/imdb/gcc-4.8.2/gcc-build-4.8.2'
make[1]: *** [stage1-bubble] 错误 2
make[1]: Leaving directory `/home/imdb/gcc-4.8.2/gcc-build-4.8.2'
make: *** [all] 错误 2

大概看看,错误集中在 x86_64unknown-linux-gnu/32/libgcc 和 x86_64-unknown-linux-gnu/libgcc
根据参考文献[3],安装如下两个软件包(仅用于CentOS6.X):
sudo yum -y install glibc-devel.i686 glibc-devel
过程中CPU基本满载:

1.6、安装
sudo make install
二、验证安装
重启,然后查看gcc版本:
gcc -v
尝试写一个C++11特性的程序段 tryCpp11.cc,使用了shared_ptr

1 //tryCpp11.cc
2 #include <iostream>
3 #include <memory>
4
5 int main()
6 {
7 std::shared_ptr<int> pInt(new int(5));
8 std::cout << *pInt << std::endl;
9 return 0;
10 }

验证文件:
g++ -std=c++11 -o tryCpp11 tryCpp11.cc
./tryCpp11
三、其他安装:
- 在Ubuntu机器上安装:参考文献[3]
- 非简易安装:参考文献[4]
- 多个gcc版本共存问题:暂无
四、参考文献
[1] 参考的主要安装步骤 http://www.cnblogs.com/ytjjyy/p/4008096.html
注:这篇文章的后半部分解决动态库的方法非常有用处
升级Centos系统之后,运行filezilla时,出现如下错误的提示信息:
./filezilla: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./filezilla)
如果是64位系统报错信息如下:
./filezilla: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./filezilla)
原因是没有GLIBCXX_3.4.15版本,或是更高的版本。
输入命令查询一下结果:
[root@localhost ~]# strings /usr/lib/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
我们看到当前GCC版本中的确没有GLIBCXX_3.4.15。
64位系统命令为:
[root@localhost ~]# strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
下载新版本,地址:http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6_4.7.2-5_i386.deb
64位系统:
http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6_4.7.2-5_amd64.deb
假设下载的文件放在/data0/software/。
解压:
[root@localhost software]# ar -x libstdc++6_4.7.2-5_i386.deb && tar xvf data.tar.gz
解压后出现/data0/software/usr目录;
[root@localhost software]# cd /data0/software/usr/lib/i380-linux-gun
[root@localhost i386-linux-gnu]# cp libstdc++.so.6.0.17 /usr/lib
[root@localhost i386-linux-gnu]# /usr/lib
[root@localhost lib]# rm libstdc++.so.6
[root@localhost lib]# ln libstdc++.so.6.0.17 libstdc++.so.6
注意64位系统为
[root@localhost software]# cd /data0/software/usr/lib/x86_64-linux-gnu
[root@localhost x86_64-linux-gnu]# cp libstdc++.so.6.0.17 /usr/lib64
[root@localhost x86_64-linux-gnu]# /usr/lib
[root@localhost lib64]# rm libstdc++.so.6
[root@localhost lib64]# ln libstdc++.so.6.0.17 libstdc++.so.6
重新建立软连接,我们再输入命令查询一下结果:
128 wget http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6_4.7.2-5_amd64.deb
129 ar -x libstdc++6_4.7.2-5_i386.deb && tar xvf data.tar.gz
130 tar -x libstdc++6_4.7.2-5_i386.deb && tar xvf data.tar.gz
131 tar -xzf libstdc++6_4.7.2-5_amd64.deb
132 tar -x libstdc++6_4.7.2-5_amd64.deb
133 ar -x libstdc++6_4.7.2-5_amd64.deb
134 ar -x libstdc++6_4.7.2-5_amd64.deb && tar xvf data.tar.gz
135 cd ./usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17
136 cd usr/
137 cd lib/
138 cd x86_64-linux-gnu
139 cp libstdc++.so.6.0.17 /usr/lib64
140 /usr/lib
141 cd /usr/lib\
142 cd /usr/lib
143 cd /root/usr/lib/x86_64-linux-gnu/
144 ls
145 strings /usr/lib/libstdc++.so.6 | grep GLIBCXX
146 cd /usr/lib
147 ln -s /usr/lib64/libstdc++.so.6.0.17 /usr/lib/libstdc++.so.6
148 strings /usr/lib/libstdc++.so.6 | grep GLIBCXX
149 cd
150 cd node-v4.0.0
151 ls
152 node
153 strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
154 mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak
155 strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
156 node
157 ln -s /usr/lib64/libstdc++.so.6.0.17 /usr/lib64/libstdc++.so.6
158 node
159 history
CentOS6.5手动升级gcc4.8.2的更多相关文章
- Centos6.X 手动升级gcc
操作环境 CentOS6.5 64bit,gcc原版本为4.4.7,不能支持C++11的特性,所以需要升级 [root@zengxj ~]# wget http://ftp.gnu.org/gnu/g ...
- CentOS6.5升级手动安装GCC4.8.2 与 CentOS 6.4 编译安装 gcc 4.8.1
http://blog.163.com/zhu329599788@126/blog/static/6669335020161179259975 http://www.cnblogs.com/codem ...
- centOS6.6升级gcc4.8
最近想升级mesos0.23.0,结果编译mesos0.23.0需要gcc4.8+,可是centOS6.6最高版本的gcc也只到4.4.7版本,只好手动升级一下了. 下载4.8.2源码 wget ft ...
- linux下安装或升级GCC4.8.2,以支持C++11标准[转]
在编译kenlm的时候需要安装gcc, 然后还需要安装g++. g++安装命令:sudo apt-get install g++ ----------------------以下为网上转载内容,加上自 ...
- 手动安装GCC4.8.5
服务器是 redhat 6,安装xgboost时,提示自带gcc 太老, 需要手动升级. 1). 手动安装 mpc-0.8.2.tar.gz, 用默认参数, 安装完后添加系统变量 export LD_ ...
- 烂泥:centos6 yum方式升级内核
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 最近没有时间好久没有写文章了,今天由于需要安装docker学习虚拟容器的知识,需要升级O ...
- 方案:手动升级WordPress系统
对于WordPress系统及时进行更新维护是十分必须的操作,更新维护不仅可以更新系统服务功能,还能够完善安全系统. 如果你是虚拟主机的用户,可以使用FTP账户进行自动更新服务,但是如果你是V ...
- 【IT小常识】如何将IE手动升级或降级
我们从浏览器任意下载一个我们需要安装的IE版本.可能部分电脑的IE版本不是微软正版的IE版本,所以无法通过更新来获取我们想要的IE版本. 下面,详细的讲一下如何如何手动升级IE或者吧IE降级. 一. ...
- 关于centos7和centos6中平滑升级nginx到新版本v1.12.1修复nginx最新漏洞CVE-2017-7529的解决方案
关于centos7和centos6中平滑升级nginx到新版本v1.12.1修复CVE-2017-7529漏洞的解决方案 漏洞描述 2017年7月11日,Nginx官方发布最新的安全公告,在Nginx ...
随机推荐
- U盘中病毒了
往U盘里拷东西的时候突然发现一个后缀名为exe图标却是文件夹的图标的文件.大概二三百K 按类型排序之后发现好几个这样的文件,大小都是一模一样的,名字分别跟我U盘里原先的文件夹对应,原本的文件夹都被设置 ...
- ETL的两种架构(ETL架构和ELT架构)
ETL ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的过程.ETL一词 ...
- Android官方架构组件介绍之LiveData(二)
LiveData LiveData是一个用于持有数据并支持数据可被监听(观察).和传统的观察者模式中的被观察者不一样,LiveData是一个生命周期感知组件,因此观察者可以指定某一个LifeCycle ...
- Choose and divide(唯一分解定理)
首先说一下什么是唯一分解定理 唯一分解定理:任何一个大于1的自然数N,如果N不是质数,那么N可以分解成有限个素数的乘积:例:N=(p1^a1)*(p2^a2)*(p3^a3)......其中p1< ...
- CAD安装失败怎样卸载CAD 2018?错误提示某些产品无法安装
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- 【PHP】 hash加密
之前对密码进行加密是在JS文件里做的,但是不行,改到PHP文件里进行加密比较安全,于是乎…… [原JS加密代码] var password = sha256_digest(pwd); 后来在网上调查方 ...
- Java取得一个对象里所有get方法和set方法, 读取某个类下所有变量的名称
所有get方法和set方法public void getMethod(Object obj){ Class clazz=obj.getClass();//获得实体类名 Field[] fields = ...
- 使用Aspose.Cell控件实现Excel高难度报表的生成
1.使用Aspose.Cell控件实现Excel高难度报表的生成(一) http://www.cnblogs.com/wuhuacong/archive/2011/02/23/1962147.html ...
- JavaScript 函数 (function)
//声明(有参数.有返回值) function fun() { var name = '小黑'; ) { name = arguments[]; //接受参数 } alert(name); retur ...
- Deloyment Descriptor Web.xml Analysis
https://javaee.github.io/tutorial/webapp003.html Web.xml详解分析: 该web.xml文件包含Facelets应用程序所需的几个元素.使用NetB ...