Linux下cmake编译jsoncpp出现错误“ error: ‘hexfloat’ is not a member of ‘std’”

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式,可读性强,易扩展,很适合做通信协议。
但在Linux底下,有时候写的C代码需要读取json文件,这时候需要cmake编译jsoncpp的源码。近期我在使用cmake对jsoncpp的时候,报错显示如下

[ 70%] Building CXX object src/test_lib_json/CMakeFiles/jsoncpp_test.dir/jsontest.cpp.o
In file included from /home/username/jsoncpp-master/src/test_lib_json/jsontest.cpp:7:0:
/home/username/jsoncpp-master/src/test_lib_json/jsontest.h: In member function ‘JsonTest::TestResult& JsonTest::TestResult::operator<<(const T&)’:
/home/username/jsoncpp-master/src/test_lib_json/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

在这里插入图片描述
仔细一看,显示源码的头文件jsontest.h中hexfloat不是std的成员函数,难道是jsoncpp的代码出错?网上查却没有人提出相似的问题,百思不得其解,后来偶然发现std其实在C++98和C++11中略有不同,C++11对std进行了扩展,而对于gcc5.1之前的编译器,默认是C++98标准的,但是由于本文下载的jsoncpp源码是比较新的版本,所以应该用C++11或C++14的标准,所以应该对gcc编译器进行升级

一、gcc编译器版本升级方法

 1. sudo add-apt-repository ppa:ubuntu-toolchain-r/test
 2. sudo apt-get update
 3. sudo apt-get install gcc-7
 4. sudo apt-get install g++-7
 5. sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 20
 6. sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 20
若存在多个版本的gcc编译器,可使用以下语句进行切换默认的gcc编译器
 7. sudo update-alternatives --config g++

修改~/.bashrc使gcc7支持C++11/14
sudo vim ~/.bashrc
在some more ls aliases注释块的地方添加下面这两行:
alias g++11=‘g++ -g -Wall -std=c++11’
alias g++14=‘g++ -g -Wall -std=c++14’
可以使用gcc -v或者g++ -v查看当前编译器版本

二、cmake编译jsoncpp

1、下载jsoncpp源码
wget https://github.com/open-source-parsers/jsoncpp/archive/master.zip
2、解压缩源码文件
unzip -x master.zip
3、cmake源码安装jsoncpp

cd jsoncpp-master
mkdir -p ./build/debug
cd ./build/debug
cmake -DCMAKE_BUILD_TYPE=debug -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_INCLUDEDIR=include/jsoncpp -DARCHIVE_INSTALL_DIR=. -G "Unix Makefiles" ../..
sudo make && make install

安装成功如下
sudo make成功如下
在这里插入图片描述
sudo make install成功如下
在这里插入图片描述

参考文献
ubuntu16.04 g++升级过程
cmake源码编译安装jsoncpp

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值