linux配置c++11编译环境
linux配置c++11编译环境
配置yum源
此处我们使用163的yum源,配置如下
首先备份/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载对应版本repo文件, 放入/etc/yum.repos.d/(操作前请做好相应备份),以下为下载链接
https://mirrors.163.com/.help/CentOS6-Base-163.repo
运行以下命令生成yum缓存
yum clean all
yum makecache
使用yum配置c++编译环境
yum配置好之后,配置c++编译环境命令如下
yum -y install gcc gcc-g++
安装完成之后c++环境即可配置好。
写一个hello worl代码如下
#include<iostream>
using namespace std;
int main()
{
cout<<"Hello World!"<<endl;
return 0;
}
以上代码保存文件名为aa.cpp,用c++编译并执行的操作如下
g++ -o hello aa.cpp
./aa.cpp
源码编译安装c++11编译环境
因为yum自带的gcc版本过低,并且c++11需要gcc4.8以上版本支持,因此需要下载gcc4.8以上版本以支持c++11
查看本地gcc版本
g++ -o hello aa.cpp
./aa.cpp
本次版本为gcc version 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
获取gcc4.8.2版本的source code
源码默认放在src目录下
cd /usr/local/src
wget http://gcc.skazkaforyou.com/releases/gcc-4.8.2/gcc-4.8.2.tar.gz
文件有100M,国外网站下载速度很慢,请耐心等待(可用国外vps下载中转)
下载完成后,放在/usr/local/src下
解压缩
tar -zxvf gcc-4.8.2.tar.gz
编译源码并安装
进入gcc目录
cd gcc-4.8.2
下载配置安装gcc4.8.2的依赖库
./contrib/download_prerequisites
建立编译输出目录
在当前路径下执行即可
./contrib/download_prerequisites
开始configure
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
-
--enable-languages
表示你要让你的gcc支持那些语言 -
--disable-multilib
不生成编译为其他平台可执行代码的交叉编译器 -
--disable-checking
生成的编译器在编译过程中不做额外检查
编译
在编译输出目录gcc-build-4.8.2直接make即可
make
源码make过程耗时较长,一般需要半个小时以上。
安装
make install
验证是否升级成功
使用which gcc
检查gcc安装的为止,使用gcc -v
检查版本,如果仍然没有变,请关闭当前会话重新连接看是否变成4.8.2,如果仍未变,需要重启系统
验证C++11程序是否可用
lambda表达式是C++11的新特性,以下程序即可验证c++11是否可用
参考:http://en.cppreference.com/w/cpp/container/array
#include <iostream>
using namespace std;
int main()
{
int n = [] (int x, int y) { return x + y; }(5, 4);
cout << n << endl;
}
验证方法
g++ -std=c++11 -o lambda vv.cpp
如果使用g++不加-std=c++11
参数,则会报错,报错如下
[root@host-192-168-150-182 tmp]# g++ -o lambda vv.cpp
vv.cpp: In function ‘int main()’:
vv.cpp:9:46: warning: lambda expressions only available with -std=c++11 or -std=gnu++11 [enabled by default]
int n = [] (int x, int y) { return x + y; }(5, 4);
^
更新gcc动态链接库
源码编译升级安装了gcc后,编译程序或运行其它程序时,有时会出现类似/usr/lib64/libstdc++.so.6: versionGLIBCXX_3.4.18’ not found的问题。这是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库导致的,将gcc最新版本的动态库替换系统中老版本的动态库即可解决。可参考以下链接
http://itbilu.com/linux/management/NymXRUieg.html
- 从业务角度分析奇怪的数据库高负载问题 (r4笔记第35天)
- 数据结构03 线性表之链表
- Java基础-12(01)总结Scanner,String
- 通过shell绑定系统进程调优 (r4笔记第34天)
- Mybatis【入门】
- 数据结构04 链表的面试题
- 数据结构05 栈
- Mybatis【配置文件】
- Java 非线程安全的HashMap如何在多线程中使用
- Java基础-12(02)总结Scanner,String
- MySQL和Oracle对比学习之数据字典元数据(r4笔记第33天)
- Java中ArrayList与LinkedList的区别
- Mybatis【关联映射】
- Java中String、StringBuffer、StringBuilder的区别
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CVE-2020-0796漏洞复现(RCE)
- Jenkins持续集成平台安装
- mysql架构备份之M-S-S级联复制
- Docker构建lnmp环境部署typecho
- MANJARO KDE安装配置(已换Arch Linux,此贴可能废弃)
- [数据库推荐]qPCR引物设计与评价
- markdown数学公式
- C++核心准则T.2:使用模板表现可以适用于多种参数类型的算法
- C++核心准则T.3:使用模板表现容器和范围
- Markdown的时序图、流程图、和甘特图+Hexo的相关配置
- 记一次Fcitx5的安装
- 解决KDE下KDE Wallet重装系统后每次登陆需要输入密码
- KDE下完美的Unity桌面体验,扔掉active window control
- C++核心准则T.5:结合使用泛型和面向对象技术应该增强它们的效果而不是成本
- C++核心准则T.10:为所有的模板参数定义概念