centos升级g++使其支持c++17

centos升级g++使其支持c++17

升级g++的原因

现象

编译最新版本的jsoncpp报一下错误

shell 复制代码
jsontest.h:87:37: error: 'hexfloat' is not a member of 'std'
     oss << std::setprecision(16) << std::hexfloat << value;
                                     ^
make[2]: *** [src/test_lib_json/CMakeFiles/jsoncpp_test.dir/jsontest.cpp.o] Error 1
make[1]: *** [src/test_lib_json/CMakeFiles/jsoncpp_test.dir/all] Error 2
make: *** [all] Error 2

原因

在编译 C++ 代码时遇到 "error: 'hexfloat' is not a member of 'std'" 这样的错误信息,这意味着代码中尝试使用了 C++ 标准库 (std) 中不存在的成员 hexfloat。

C++ 标准支持问题:如果正在使用的是 C++14 或更早的标准,hexfloat 关键字可能不受支持。hexfloat 是从 C++17 开始引入的一个特性,用于表示十六进制浮点字面量。

查看当前g++版本

g++ --version
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.

原始版本太老不支持c++17的新特性,需要升级g++版本

升级g++方法

使用yum出现以下报错

shell 复制代码
Could not retrieve mirrorlist http://mirrorlist.centos.org?arch=x86_64&release=7&repo=sclo-rh error was
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error"

2024 年 7 月 1 日 官方停止维护 CentOS 7。该系统内置的 yum.repo 所使用的域名 mirrorlist.centos.org 不能使用。

更新镜像源

1.备份官方的原yum源的配置

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2.下载Centos-7.repo文件

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3.CentOS-SCLo-scl.repo CentOS-SCLo-scl-rh.repo 修改这两个文件

CentOS-SCLo-scl.repo

shell 复制代码
[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/sclo/
# mirrorlist=https://mirrors.aliyun.com?arch=$basearch&release=7&repo=sclo-sclo
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

CentOS-SCLo-scl-rh.repo

shell 复制代码
[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
#mirrorlist=https://mirrors.aliyun.com?arch=$basearch&release=7&repo=sclo-rh
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

4.清除及生成缓存。

shell 复制代码
# 清除yum缓存
yum clean all
# 缓存阿里云源
yum makecache
# 测试阿里云源 
yum list

yum升级g++版本

shell 复制代码
yum list devtoolset-*-gcc
yum -y install centos-release-scl
yum -y install devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils

当前控制台生效:

scl enable devtoolset-11 bash

重启后也要生效:(可选)

echo "source /opt/rh/devtoolset-11/enable" >>/etc/profile

总结

本文从jsoncpp编译出错出发,到解决问题,配置了镜像源,升级了g++。
Linux下cmake编译jsoncpp出现错误
CentOS7配置阿里云镜像源
centos7-更换源|升级gcc

相关推荐
程序猿阿伟2 分钟前
《C++中的魔法:实现类似 Python 的装饰器模式》
java·c++·装饰器模式
Mr. zhihao4 分钟前
装饰器模式详解:动态扩展对象功能的优雅解决方案
java·开发语言·装饰器模式
zyhomepage4 分钟前
科技的成就(六十四)
开发语言·人工智能·科技·算法·内容运营
Ethan Wilson11 分钟前
C++/QT可用的websocket库
开发语言·c++·websocket
小宇1 小时前
The valid characters are defined in RFC 7230 and RFC 3986
java·开发语言·后端·tomcat
尘浮生1 小时前
Java项目实战II基于Spring Boot的美食烹饪互动平台的设计与实现(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·微信小程序·小程序·美食
杨荧1 小时前
【JAVA毕业设计】基于Vue和SpringBoot的校园美食分享平台
java·开发语言·前端·vue.js·spring boot·java-ee·美食
糊涂君-Q1 小时前
Python小白学习教程从入门到入坑------第十九课 异常模块与包【下】(语法基础)
开发语言·python·学习·程序人生·改行学it
ergevv1 小时前
类的变量的初始化:成员初始化列表、就地初始化
c++·初始化·
爱编程的小新☆1 小时前
Java篇图书管理系统
java·开发语言·学习