各版本gcc对C++标准的支持情况

GCC所有版本支持C++和C语言情况

版本

发布时间

默认支持C标准

默认支持C++标准

GCC 13.1

April 26, 2023

C17

C++17

GCC 12.2

August 19, 2022

C17

C++17

GCC 10.4

June 28, 2022

C17

C++14

GCC 9.5

May 27, 2022

C17

C++14

GCC 12.1

May 6, 2022

C17

C++14

GCC 11.3

April 21, 2022

C17

C++17

GCC 11.2

July 28, 2021

C17

C++17

GCC 9.4

June 1, 2021

C17

C++14

GCC 8.5

May 14, 2021

C17

C++14

GCC 11.1

April 27, 2021

C17

C++17

GCC 10.3

April 8, 2021

C17

C++14

GCC 10.2

July 23, 2020

C17

C++14

GCC 10.1

May 7, 2020

C17

C++14

GCC 9.3

March 12, 2020

C17

C++14

GCC 8.4

March 4, 2020

C17

C++14

GCC 7.5

November 14, 2019

C11

C++14

GCC 9.2

August 12, 2019

C17

C++14

GCC 9.1

May 3, 2019

C17

C++14

GCC 8.3

February 22, 2019

C17

C++14

GCC 7.4

December 6, 2018

C11

C++14

GCC 6.5

October 26, 2018

C11

C++98

GCC 8.2

July 26, 2018

C17

C++14

GCC 8.1

May 2, 2018

C17

C++14

GCC 7.3

January 25, 2018

C11

C++14

GCC 5.5

October 10, 2017

C11

C++98

GCC 7.2

August 14, 2017

C11

C++14

GCC 6.4

July 4, 2017

C11

C++14

GCC 7.1

May 2, 2017

C11

C++14

GCC 6.3

December 21, 2016

C11

C++14

GCC 6.2

August 22, 2016

C11

C++14

GCC 4.9.4

August 3, 2016

C90

C++98

GCC 5.4

June 3, 2016

C11

C++98

GCC 6.1

April 27, 2016

C11

C++14

GCC 5.3

December 4, 2015

C11

C++98

GCC 5.2

July 16, 2015

C11

C++98

GCC 4.9.3

June 26, 2015

C90

C++98

GCC 4.8.5

June 23, 2015

C90

C++98

GCC 5.1

April 22, 2015

C90

C++98

GCC 4.8.4

December 19, 2014

C90

C++98

GCC 4.9.2

October 30, 2014

C90

C++98

GCC 4.9.1

July 16, 2014

C90

C++98

GCC 4.7.4

June 12, 2014

C90

C++98

GCC 4.8.3

May 22, 2014

C90

C++98

GCC对C++版本迭代支持情况

C++版本

GCC版本支持情况

GCC版本

指定版本的命令标志

C++98

完全支持

从GCC6.1之前版本的默认模式

-std=c++98 or std=gnn++98

C++11

完全支持

从GCC4.8.1版本完全支持

-std=c++11 or std=gnu++11

C++14

完全支持

从GCC6.1版本开始完全支持,从6.1-10(包括)的默认模式

-std=c++14 or std=gnu++14

C++17

完全支持

从GCC 5版本开始支持,到GCC 7版本已完全支持,是GCC 11到13版本的默认模式

-std=c++17 or std=gnu++17

C++20

未完全支持

从GCC 8版本开始支持

-std=c++20 or

std=gnu++20(GCC 9以及之前版本使用-std=c++2a)

C++23

未完全支持(标准开发中)

从GCC 11版本开始支持

-std=c++2b or

std=gnu++2b

Popularity: 1% [?]

Random Posts

给CentOS6添加高版本gcc8支持

先换yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-6.10.repo

如果没有安装 centos-release-scl 工具包,可以使用如下方式先装它 (或在Extra光盘上找到它做安装)
wget https://copr.fedorainfracloud.org/coprs/rhscl/centos-release-scl/repo/epel-6/rhscl-centos-release-scl-epel-6.repo -O /etc/yum.repos.d/centos-release-scl.repo
yum install centos-release-scl

设置devtoolset-8的源信息
wget https://copr.fedorainfracloud.org/coprs/mayeut/devtoolset-8/repo/epel-6/mayeut-devtoolset-8-epel-6.repo -O /etc/yum.repos.d/devtoolset-8.repo
安装devtoolset-8-toolchain
yum install devtoolset-8-toolchain
安装过程中提示依赖包 strace 失败通不过,使用下面命令安装必须的编译器部分
yum install devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils

启用它
scl enable devtoolset-8 hash

启用后,cmake未能正确识别新的gcc版本,可以在使用cmake时添加上命令行参数 -DCMAKE_CXX_COMPILER=/opt/rh/devtoolset-8/root/usr/bin/g++

Popularity: 1% [?]

Random Posts

“no space left on device”问题解决

一台服务器上服务起不来,看日志报错 “no space left on device”

利用

df -h

查看,发现硬盘空间一半都没有占用到,然后使用命令

df -i

发现是inode耗光了,需要找到在哪里占用了inode
利用如下命令找到inode最多的目录,然后将 in /* 替换成 in 新目录/* 逐层找下面最多inode节点的目录

for i in /*; do echo $i; find $i | wc -l; done

最后发现是在 /var/spool/postfix/maildrop目录下,大量耗费inode,使用命令

find /var/spool/postfix/maildrop/ -type f |xargs rm -rf

删除/var/spool/postfix/maildrop目录内容

为了防止以后再出现这个问题,需要修改

/etc/crontab

MAILTO=root

修改为

MAILTO=""

然后执行

service crond restart

Popularity: 1% [?]

Random Posts

H3C的ER5200G3关闭53端口的处理方法

接到上级通知,专线互联网IP没有备案不能提供DNS解析服务,想着进线接在ER5200G3设备上,没有提供DNS解析服务,怎么就被通知了呢?
使用端口扫描工具扫描公网地址的 53端口,果然端口是被打开了
登录上ER5200G3,发现里面有静态DNS解析的设置,但是WEB管理界面上没有关闭的地方
尝试使用ER5200G3的防火墙设置来关闭禁止这个端口,但是未能成功,
搜索了一下网上,也有人碰到这个问题,有人是换掉ER5200G3,也有人是在ER5200G3前面又放置了一个防火墙禁用端口
这两种方式都不现实,尝试了一下,使用NAT转发,将53端口的数据转到一个内网的机器上加以拒绝,然后在扫描公网IP的53端口,端口果然不再是打开状态了
完事收工

Popularity: 1% [?]

Random Posts

给esxi中的Ubuntu虚拟机扩展硬盘容量小结

前面给CentOS7做了扩容,顺手将一台Ubuntu的机子也扩下容量。
本次使用图形化的 GParted 来操作,
首先在esxi中对Ubuntu机器硬盘容量扩容,下载GParted的镜像,在esxi中作为启动光盘启动。
进入GParted界面,
首先删除后面的 Swap分区,再删除Extended分区,
然后将剩下的分区拉伸扩展容量(一般是/dev/sda1,记得留下一些未分配空间作为Swap分区使用)
将剩下的预留未分配空间,先新建Extended分区,再在Extended分区中建Swap分区
在GParted中应用变更,然后重启Ubuntu
这个时候新建的swap分区没有起作用,使用 free -m 可以看到swap为0,
为了使swap生效,需要修改一下/etc/fstab中swap分区的uuid
首先使用 sudo blkid 命令查看swap分区的uuid,一般对应 /dev/sda5
使用 sudo vi /etc/fstab 将swap分区的uuid修改为新看到的值
重启Ubuntu

Popularity: 3% [?]

Random Posts

给esxi中的CentOS7虚拟机扩展硬盘容量小结

测试用的CentOS7虚拟机空间不够了,需要给他增加一些容量,在esxi中给虚拟机增大了硬盘容量发现系统中并没有增加,网上搜索了一下,还需要在CentOS7中将增加的容量添加进来
参考了 https://blog.csdn.net/QIU176161650/article/details/118379783 这篇文章,主要在CentOS中有几个阶段
1. 查看现有分区情况

#查看目前磁盘使用情况
df -Th
#查看当前系统分区情况,初始系统安装后,应该存在 sda1,sda2两个分区,
#增加了容量后,应该会看到sda盘的容量大于sda1,sda2两个分区的容量和,
#缺少的容量需要新建分区利用起来
lsblk

2.新建分区,将esxi中增加的容量放到新分区中

#查看磁盘情况,可忽略,前面的 lsblk 已经大致有分区信息
fdisk -l
#新增分区,对 /dev/sda 盘新建分区
fdisk /dev/sda
输入 p
新建分区输入 n
回车(默认为主分区 primary)
分区号,起始扇区,结束扇区都默认(回车),直接将剩余空间都划分到这个空间去
设置分区格式输入:t
分区号默认(回车) 对应最后一个数字为新增加的这个分区
Hex代码为 8e (8e代表Linux LVM分区类型)
w (写入分区表)
等待分区完成

使用命令fdisk -l 或 lsblk 查看确认新建的分区已经建好,
第一次新增应该为 /dev/sda3,分区格式为Linux LVM类型

3.格式化新建分区并作合并
重启一下虚拟机或者使用 partprobe 命令通知系统内核重新加载分区信息

#开始格式化分区, /dev/sda3 为新建的分区,
#如果是其他编号(比如第二次扩展容量)需要修改对应值,
#命令mkfs.ext3 还有其他值,比如 mkfs.xfs, mkfs.ext4 等,按照自己需要建立
mkfs.ext3 /dev/sda3

#合并分区,先执行 lvm 命令,在lvm控制台中进行
#lvm
lvm>pvcreate /dev/sda3
# centos为分组名,对应lsblk命令看到的 centos-root 之类减号前的部分,通常为centos
# 或者使用 lvdisplay 查看,为VG Name对应的值
lvm>vgextend centos /dev/sda3
# 输入y确认
# 查看下当前卷信息,记录下 /dev/sda3 新建卷的 Total PE/Free PE的值
lvm>vgdisplay -v

#将sda3的余量合并到系统盘root (/dev/mapper/centos-root)
#或其他盘,比如home (/dev/mapper/centos-home) 下
#参数 -l+112639 为上面一步看看到的FreePE值
lvm>lvextend -l+112639 /dev/mapper/centos-root
lvm>quit

#最后将文件系统扩容,让系统识别到容量
xfs_growfs /dev/mapper/centos-root

4. 再次使用 fdisk -l 或 lsblk 命令确认分区大小情况

Popularity: 3% [?]

Random Posts

使用Dynatrace的ADK对C++服务代码做注入修改小结

因为要用Dynatrace监测C++写的服务,因此使用了ADK开发包做代码注入:
主要修改的注入点有:
1. 服务端接受请求的入口
先通过http头信息获取传递过来的tag, 使用DYNATRACE_SET_TAG_FROM_STRING宏设置tag值
然后放入 DYNATRACE_START_SERVER_PUREPATH, DYNATRACE_END_SERVER_PUREPATH 宏对

在具体的处理点放入 DYNATRACE_AUTO_PUREPATH 标志入口点,如果要捕获参数,采用 DYNATRACE_AUTO_PUREPATH_CAPTURE(DYNATRACE_CAPTURE << param)
在需要监测时间消耗的函数入口位置放入 DYNATRACE_AUTO_NODE,如果需要捕获参数,则使用 DYNATRACE_AUTO_NODE_CAPTURE(DYNATRACE_CAPTURE << param)

2. 服务内部发起的http请求
首先在入口函数处放入 DYNATRACE_AUTO_PUREPATH_CAPTURE(DYNATRACE_CAPTURE << url.c_str()) 宏,可以捕获请求的地址参数
然后使用 DYNATRACE_GET_TAG_AS_STRING 宏获取Dynatrace 自动创建的tag, 并将其放入http的请求头传递给服务端
再通过 DYNATRACE_LINK_CLIENT_PUREPATH_BY_STRING 将这个tag和PUREPATH关联起来

3. 服务内部发起的数据库请求
在发起数据库请求的地方,放入 DYNATRACE_AUTO_NODE(DYNATRACE_CAPTURE << sql.c_str()) 捕获SQL执行时间消耗情况

碰到问题:
1. Dynatrace界面中看到的入口purepath是函数名称,不是 /xxx/yyy这样的请求地址样式
2. 内部请求的数据库,没有在界面上像PHP监测那样被拆分到Database,作为ADK内部的API划分
3. 使用DYNATRACE_CAPTURE << strparam 捕获的utf8中文字符串会显示乱码

解决方法
1.2 解决方法未知
3. 替换使用 DYNATRACE_CAPTURE_STRING_WITH_CHARSET(strparam, strlen(strparam), DYNATRACE_CCSID_UTF8) 方式捕获参数值

特别注意
DYNATRACE_API设置的不是具体函数方法名,而是注入点分类名,比如Serv, HttpClient, Database这样的注入点分类,用于在界面上的API分布查看各自的时间消耗比

Popularity: 4% [?]

Random Posts

给使用Minimal方式安装的Centos系统补充gcc开发环境和java运行环境

为节省空间,在虚拟机中使用Minimal方式安装了CentOS的最小系统
使用yum安装补充,首先使用ifconfig命令看不到ip,提示命令不存在,使用
ip addr show
可以看到当前地址,确认有可以上网的ip(安装时可选择dhcp方式获取ip,确保在网络中启动后有ip地址),
否则自己修改/etc/sysconfig/network-scripts/目录下的接口配置文件修改ip地址信息后,重启虚拟机
使用命令

yum install net-tools -y

安装ifconfig相关命令工具
使用命令

yum install gcc g++ gdb -y

安装gcc环境
使用命令

yum install java-1.8.0-openjdk* -y

安装jdk1.8版本
也可以使用

yum install java-11-openjdk* -y

安装Jdk11版本

Popularity: 5% [?]

Random Posts

Dynatrace 本地部署安装以及Linux下Nginx+PHP配置使用

搞到一份Dyanatrace的本地部署安装包,安装试了一下,体验全链路监测

监测Linux下的PHP配置过程
首先看到新建配置的界面

首先建立一个名字为Test的配置,出现如下选择界面,选择PHP

然后出现针对PHP环境的设置步骤,

按照提示来,首先选择UEM

点击上面的图标,出现的是到dynatrace的连接,因为程序比较老,打开的链接已经是404出错,点击WEB按钮,按照地址名称重新找了一下链接,大约是
https://www.dynatrace.com/support/help/platform-modules/digital-experience/web-applications 可以对照着看一下
选择第二步骤,添加PHP环境,出现如下界面,因为是Linux下的Nginx,所以选第二个

出来机器和版本选择

因为是非本机的64位Linux,所以选择远程64位

按照提示将下载的文件上传到运行php的linux服务器上,我放到了/opt目录下解压,执行命令
/bin/sh dynatrace-wsagent-7.2.0.1697-linux-x64.sh
按照运行命令后出现的提示,修改文件 /opt/dynatrace-7.2/init.d/dynaTraceWebServerAgent 校对其中的 DT_HOME 值,然后将这个文件拷贝到/etc/init.d目录下
执行命令 chkconfig –add dynaTraceWebServerAgent 添加到机器开机启动服务中去
可以使用 chkconfig –level 2345 dynaTraceWebServerAgent on 做调整

按照提示,修改/opt/dynatrace-7.2/agent/conf/dtwsagent.ini
修改其中的Name 和 Server 值设置 (可以拷贝粘贴过去,记得将原始值删除掉)

按照提示修改nginx的启动命令,我这里修改为
LD_PRELOAD=/opt/dynatrace-7.2/agent/lib64/libdtagent.so nginx
再修改php.ini文件,其中添加一行
extension=/opt/dynatrace-7.2/agent/lib64/libdtagent.so
关闭nginx重新启动
配置数据库

连接测试时出错

按照提示检查数据库,缺少sys库,然后查了一下MySQL库在5.7版本以上才有这个库,所以要监测MySQL库,就必须先将MySQL库升级到5.7版本以上

Popularity: 5% [?]

Random Posts

在exsi中将来自其他机器的盘注册加载

换机器,将原先exsi机器上的盘放到新机器上,没能自动注册到存储列表中,需要手工注册登记

首先开启exsi的ssh服务,使用ssh连接到esxi机器上
先执行

esxcfg-volume -l

命令查看丢失的卷标
Scanning for VMFS-6 host activity (4096 bytes/HB, 1024 HBs).
VMFS UUID/label: 64982e42-f1ffaaaa-7963-04d9f504022b/ssddisk_1
Can mount: Yes
Can resignature: Yes

注意蓝色的值和后面标的名称,正是丢失的数据存储标签名
执行

esxcfg-volume -m 64982e42-f1ffaaaa-7963-04d9f504022b 

或者直接使用标签名

esxcfg-volume -m ssddisk_1 

挂载磁盘
挂载后再执行

esxcfg-volume -l 

应该看不到磁盘数据,因为盘已经被挂载了
执行

ls /vmfs/volumes 

查看验证磁盘已经挂载,在管理界面刷新可见新挂载的盘

Popularity: 5% [?]

Random Posts

Next Page →