各版本gcc对C++标准的支持情况
GCC所有版本支持C++和C语言情况
版本 |
发布时间 |
默认支持C标准 |
默认支持C++标准 |
April 26, 2023 |
C17 |
C++17 |
|
August 19, 2022 |
C17 |
C++17 |
|
June 28, 2022 |
C17 |
C++14 |
|
May 27, 2022 |
C17 |
C++14 |
|
May 6, 2022 |
C17 |
C++14 |
|
April 21, 2022 |
C17 |
C++17 |
|
July 28, 2021 |
C17 |
C++17 |
|
June 1, 2021 |
C17 |
C++14 |
|
May 14, 2021 |
C17 |
C++14 |
|
April 27, 2021 |
C17 |
C++17 |
|
April 8, 2021 |
C17 |
C++14 |
|
July 23, 2020 |
C17 |
C++14 |
|
May 7, 2020 |
C17 |
C++14 |
|
March 12, 2020 |
C17 |
C++14 |
|
March 4, 2020 |
C17 |
C++14 |
|
November 14, 2019 |
C11 |
C++14 |
|
August 12, 2019 |
C17 |
C++14 |
|
May 3, 2019 |
C17 |
C++14 |
|
February 22, 2019 |
C17 |
C++14 |
|
December 6, 2018 |
C11 |
C++14 |
|
October 26, 2018 |
C11 |
C++98 |
|
July 26, 2018 |
C17 |
C++14 |
|
May 2, 2018 |
C17 |
C++14 |
|
January 25, 2018 |
C11 |
C++14 |
|
October 10, 2017 |
C11 |
C++98 |
|
August 14, 2017 |
C11 |
C++14 |
|
July 4, 2017 |
C11 |
C++14 |
|
May 2, 2017 |
C11 |
C++14 |
|
December 21, 2016 |
C11 |
C++14 |
|
August 22, 2016 |
C11 |
C++14 |
|
August 3, 2016 |
C90 |
C++98 |
|
June 3, 2016 |
C11 |
C++98 |
|
April 27, 2016 |
C11 |
C++14 |
|
December 4, 2015 |
C11 |
C++98 |
|
July 16, 2015 |
C11 |
C++98 |
|
June 26, 2015 |
C90 |
C++98 |
|
June 23, 2015 |
C90 |
C++98 |
|
April 22, 2015 |
C90 |
C++98 |
|
December 19, 2014 |
C90 |
C++98 |
|
October 30, 2014 |
C90 |
C++98 |
|
July 16, 2014 |
C90 |
C++98 |
|
June 12, 2014 |
C90 |
C++98 |
|
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: 5% [?]
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% [?]