Openssl数据安全传输平台010:jasoncpp 0.10.7的编译 - Windows-vs2022 / Ubuntu/ Centos8 -含测试代码

文章目录

  • 0. 代码仓库
  • 1 安装
    • 1.1 windows 下的安装
    • 1.2 Linux 下的安装
    • 1.2.1 相关环境配置问题
    • 1.2.2 准备安装
      • 1.2.2.1 安装scons
      • 1.2.2.2 安装jsoncpp
        • Ubuntu系统下
        • Centos8系统下
  • 2 编译 c++ 测试文件: json-test.cpp
    • 2.1 配置库文件
    • 2.2 配置VS
    • 2.3 Winsows系统下cpp文件测试
      • 2.3.1 写json测试结果
      • 2.3.2 读json测试结果
  • 3 jsoncpp常用API
    • 3.1 Value -> 对Json支持的数据类型进行封装/解析
    • 3.2 Reader
    • 3.3 FastWriter

0. 代码仓库

https://github.com/Chufeng-Jiang/OpenSSL_Secure_Data_Transmission_Platform/tree/main/Preparation

1 安装

1.1 windows 下的安装

  • 在windows下 将 jsoncpp-0.10.7.tar.gz解压缩

  • 进入到解压目录jsoncpp-0.10.7, 在进入到子目录makefiles\msvc2010

  • 使用vs打开项目文件jsoncpp.sln

  • 编译该项目, 生成库文件

    在这里插入图片描述在这里插入图片描述

在这里插入图片描述

  • 生成的静态库存储目录jsoncpp-0.10.7\makefiles\msvc2010\Debug

  • 生成的静态库文件: lib_json.lib
    在这里插入图片描述

  • 使用的准备工作:

    • 将静态库lib_json.lib拿出备用
    • 将库对应的头文件拿出, 头文件目录jsoncpp-0.10.7\include\json
      在这里插入图片描述
  • 把文件拿出来备用

在这里插入图片描述

  • vs编译过程中, 修改属性
    在这里插入图片描述

1.2 Linux 下的安装

1.2.1 相关环境配置问题

要安装python2,参考以下文章…哎…我把centos下安装py2搞复杂了,浪费了一上午,竟然还打算自己去编译py2的源码,简直脑子进水…

Centos8: 安装python2, 并设置默认版本

  1. python与python3

/usr/bin/env: ‘python’: No such file or directory“:Linux中python口令无效,python3有效

  1. python2和python3 print语句的括号问题
    python2中的语句是不用加括号的,但是python3中的print需要加语句。这导致了使用python3配环境时候出现以下错误
    在这里插入图片描述

1.2.2 准备安装

- `jsoncpp-0.10.7.tar.gz`
- `scons-3.0.5.zip`
  • 解压缩

    tar zxvf jsoncpp-0.10.7.tar.gz
    unzip scons-3.0.5.zip
    

1.2.2.1 安装scons

  • 安装scons -> 进入 scons-3.0.5.zip 的解压目录

     sudo python setup.py install 
    

    在这里插入图片描述

1.2.2.2 安装jsoncpp

  • 安装 jsoncpp -> 进入 jsoncpp-0.10.7.tar.gz 的解压目录
sudo scons platform=linux-gcc

在这里插入图片描述

Ubuntu系统下
// 将生成的动态库/静态库拷贝到系统的库目录中, 需要管理员权限,Ubuntu系统下是gcc11/centos是gcc7
sudo cp libs/linux-gcc-11/* /lib// 拷贝json的头文件到系统目录中, 需要管理员权限
sudo cp include/json/ /usr/include/ -r// 创建动态库的链接文件, 需要管理员权限
sudo ln -s /lib/libjson_linux-gcc-11_libmt.so /lib/libjson.so// 更新, 这样才能搜索到动态库 libjson.so。需要管理员权限
sudo ldconfig    // 测试
sudo ./bin/linux-gcc-11/test_lib_json Testing ValueTest/checkNormalizeFloatingPointStr: OK
Testing ValueTest/memberCount: OK
Testing ValueTest/objects: OK
Testing ValueTest/arrays: OK
..................
Testing BuilderTest/settings: OK
Testing IteratorTest/distance: OK
Testing IteratorTest/names: OK
Testing IteratorTest/indexes: OK
All 53 tests passed

在这里插入图片描述
在这里插入图片描述

Centos8系统下
// 将生成的动态库/静态库拷贝到系统的库目录中, 需要管理员权限,centos是gcc7
sudo cp libs/linux-gcc-7/* /lib// 拷贝json的头文件到系统目录中, 需要管理员权限
sudo cp include/json/ /usr/include/ -r// 创建动态库的链接文件, 需要管理员权限
sudo ln -s /lib/libjson_linux-gcc-7_libmt.so /lib/libjson.so// 更新, 这样才能搜索到动态库 libjson.so。需要管理员权限
sudo ldconfig    
// 测试
sudo ./bin/linux-gcc-7/test_lib_json 
Testing ValueTest/checkNormalizeFloatingPointStr: OK
Testing ValueTest/memberCount: OK
Testing ValueTest/objects: OK
Testing ValueTest/arrays: OK
..................
Testing BuilderTest/settings: OK
Testing IteratorTest/distance: OK
Testing IteratorTest/names: OK
Testing IteratorTest/indexes: OK
All 53 tests passed

在这里插入图片描述

2 编译 c++ 测试文件: json-test.cpp

g++ json-test.cpp -ljson -o json

2.1 配置库文件

把备份的库文件拷贝到工程目录下在这里插入图片描述

2.2 配置VS

在这里插入图片描述在这里插入图片描述

2.3 Winsows系统下cpp文件测试

#include <json.h>
#include <iostream>
#include <fstream>
using namespace Json;	// jsoncpp的命名空间
using namespace std;void writeJson()
{// 组织数据, 并写入到磁盘文件
// [12, 19.8, true, "hello", ["a", "b", "c"], {"name":"xiaoming"}, "age":12]Value v;v.append(Value(12));v.append(19.8);v.append(true);v.append("hello");// 创建一个数组对象 ValueValue arr;arr.append("a");arr.append("b");arr.append("c");// 创建json对象 -> ValueValue obj;obj["name"] = "xiaoming";obj["age"] = 12;v.append(arr);v.append(obj);// 将得到Value对象 v 格式化 -> string -> 写磁盘string st = v.toStyledString();cout << "v style: " << st << endl;FastWriter fw;string jsonText = fw.write(v);cout << "jsonText: " << jsonText << endl;// 创建写文件的流对象// ofstream of;// of.open("test.json");ofstream of("test.json");of << st;of.close();
}void readJson()
{// 1. 将磁盘文件数据读出 -> stringifstream ifs("test.json");// 2. 将string -> Value 对象中Reader rd;Value root;rd.parse(ifs, root);// 3 打印输出// 遍历数组for (int i = 0; i < root.size(); ++i){Value sub = root[i];if (sub.isInt()){cout << sub.asInt() << " ";}else if (sub.isDouble()){cout << sub.asDouble() << " ";}else if (sub.isBool()){cout << sub.asBool() << " ";}else if (sub.isString()){cout << sub.asString() << " ";}else if (sub.isArray()){// 继续遍历这个子数组for (int j = 0; j < sub.size(); ++j){cout << sub[j].asString() << " ";}cout << endl;}else if (sub.isObject()){// 根据对象中的key, 打印value值cout << sub["name"].asString() << ", "<< sub["age"].asInt() << " ";}}
}int main()
{writeJson();
//	readJson();
}

2.3.1 写json测试结果

在这里插入图片描述
在这里插入图片描述

2.3.2 读json测试结果

在这里插入图片描述

3 jsoncpp常用API

3.1 Value -> 对Json支持的数据类型进行封装/解析

// Json支持的数据类型
Type = {int, double, float, string, char*, bool, JsonArray, JsonObject}
// 构造函数Value(ValueType type = nullValue);Value(Int value);Value(UInt value);
#if defined(JSON_HAS_INT64)Value(Int64 value);Value(UInt64 value);
#endif // if defined(JSON_HAS_INT64)Value(double value);Value(const char* value); ///< Copy til first 0. (NULL causes to seg-fault.)Value(const char* begin, const char* end);// 将Value对象转换成对应类型的数据Int asInt() const;UInt asUInt() const;
#if defined(JSON_HAS_INT64)Int64 asInt64() const;UInt64 asUInt64() const;
#endif // if defined(JSON_HAS_INT64)LargestInt asLargestInt() const;LargestUInt asLargestUInt() const;float asFloat() const;double asDouble() const;bool asBool() const;// 判断Value对象中存储的数据的类型bool isNull() const;bool isBool() const;bool isInt() const;bool isInt64() const;bool isUInt() const;bool isUInt64() const;bool isIntegral() const;bool isDouble() const;bool isNumeric() const;bool isString() const;bool isArray() const;bool isObject() const;// 取值 
// 格式化 -> 将对象转换为字符串
// 适合于查看信息或者写文件
std::string toStyledString() const;

3.2 Reader

// json格式字符串 -> Value对象
// c++
bool parse(const std::string& document, Value& root, bool collectComments = true);参数:- document: json字符串, 传入参数- root: 传出参数, 转换完成之后的Value对象
// c用法
bool parse(const char* beginDoc, const char* endDoc, Value& root, bool collectComments = true);参数:- beginDoc: 字符串起始地址- endDoc: 字符串结束地址- root: 传出参数, 转换完成之后的Value对象
// c++用法
bool parse(std::istream& is, Value& root, bool collectComments = true);参数:- is: 文件流对象, 使用这个流对象打开一个磁盘文件- root: 传出参数, 转换完成之后的Value对象

3.3 FastWriter

// 将Value对象中的数据格式化 -> 字符串
// 适合于网络数据的发送
// 得到的字符串中没有换行符
std::string write(const Value& root);// 得到这个返回值:- 写磁盘 -> 写到配置文件中- 网络传参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/172229.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity ScrollView最底展示

Unity ScrollView最底展示 问题方案逻辑 问题 比如在做聊天界面的时候我们肯定会使用到ScrollView来进行展示我们的聊天内容&#xff0c;那么这个时候来新消息的时候就需要最底展示&#xff0c;我认为这里有两种方案&#xff1b; 一种是通过算法每一条预制体的高度*一共多少…

嵌入式-数码管控制

一、数码管显示数字&#xff0c;P2_4, P2_3,P2_2,这三个组合起来代表1-8的二进制表示代表1-8个led。P0代表要显示的数字的16进制表示。 这个图就是表示led灯, 比如要显示数据6&#xff0c;那就是0111 1101&#xff0c;那么16进制就是0x7D,所以p00x7D 二、数码管&#xff0c;动…

TYWZOJ 礼品配对包装 题解

文章目录 题目描述输入格式输出格式样例样例输入样例输出 数据范围与提示思路与部分实现完整代码 题目描述 爱与愁大神在这家目标店买了 2 x 2x 2x 份礼物&#xff0c;打算分给班级同学。其中有 x x x 份黑礼品&#xff0c; x x x 份白礼品&#xff0c; 2 x 2 2x2 2x2 个空…

Builder 请进:波卡最新开发入门指南

撰文&#xff1a;Dennis Zoma 编译&#xff1a;OneBlock 社区 本文更新于 2023 年 10 月 3 日&#xff0c;来源&#xff1a;https://wiki.polkadot.network/docs/build-guide Polkadot 是一个区块链协议&#xff0c;有两个目标&#xff1a;在所有连接的平行链之间提供共享安全…

如何能够在发现问题和提问的时候一并带出自己的解决方案

1. 充分理解问题&#xff1a; 在提出问题之前&#xff0c;确保你已经完全理解了问题的本质。从不同的角度分析问题&#xff0c;确保没有遗漏任何重要的信息或者上下文。 2. 进行自我调查和研究&#xff1a; 在向他人寻求帮助之前&#xff0c;尝试自己解决问题。利用网络资源…

vue项目package.json与package-lock.json作用及区别

package.json文件介绍和使用 运行项目&#xff0c;命令行: npm run dev “dependencies” 运行依赖&#xff0c;需引入页面使用 “devDependencies” 开发依赖(生产环境使用)&#xff0c;只是开发阶段需要 我们每次新建一个项目的时候会发现在项目中会有这么俩个相似的文件&am…

vue3基础流程

目录 1. 安装和创建项目 2. 项目结构 3. 主要文件解析 3.1 main.js 3.2 App.vue 4. 组件和Props 5. 事件处理 6. 生命周期钩子 7. Vue 3的Composition API 8. 总结和结论 响应式系统&#xff1a; 组件化&#xff1a; 易于学习&#xff1a; 灵活性&#xff1a; 社…

grafana InfluxDB returned error: error reading influxDB 400错误解决

问题&#xff1a; 如图提示错误解决 确认自己的docker容器是否配置了以下3个字段 DOCKER_INFLUXDB_INIT_USERNAMExxx DOCKER_INFLUXDB_INIT_PASSWORDyyy DOCKER_INFLUXDB_INIT_ADMIN_TOKENzzz 如果有&#xff0c;在grafana中需要添加header配置Header: Authorization , Value…

SSM宾馆客房管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 宾馆客房管理系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代 码和数据库&#xff0c;系统…

mac安装jenkins

1、安装jenkins之前确认是否安装了homebrew 2、开始安装jenkins 安装完如下图则安装完成 3、不想用默认ip和端口的自己改一下ip和端口 4、启动jenkins brew services restart jenkins 使用自己修改后的ip:port http://0.0.0.0:8088 根据提示信息&#xff0c;拿到管理员密码&…

Echarts 实现 设备运行状态图(甘特图) 工业大数据展示

let option{tooltip: {formatter: function (params) {let startTime new Date(params.value[1])let endTime new Date(params.value[2]);//北京时间/时间戳转成日常时间function convert(date){var y date.getFullYear();var m date.getMonth() 1;m m < 10 ? "0…

如何在 Azure 容器应用程序上部署具有 Elastic Observability 的 Hello World Web 应用程序

作者&#xff1a;Jonathan Simon Elastic Observability 是提供对正在运行的 Web 应用程序的可见性的最佳工具。 Microsoft Azure 容器应用程序是一个完全托管的环境&#xff0c;使你能够在无服务器平台上运行容器化应用程序&#xff0c;以便你的应用程序可以扩展和缩减。 这使…

Redis(01)| 数据结构

这里写自定义目录标题 Redis 速度快的原因除了它是内存数据库&#xff0c;使得所有的操作都在内存上进行之外&#xff0c;还有一个重要因素&#xff0c;它实现的数据结构&#xff0c;使得我们对数据进行增删查改操作时&#xff0c;Redis 能高效的处理。 因此&#xff0c;这次我…

Apriori介绍及代码批注

一、Apriori原理解析 1. 概述 关联规则分析是数据挖掘中最活跃的研究方法之一&#xff0c;目的是在一个数据集中找到各项之间的关联关系&#xff0c;而这种关系并没有在数据中直接体现出来。以超市的销售数据为例&#xff0c;当存在很多商品时&#xff0c;可能的商品组合数量…

【Opencv4快速入门】轮廓检测findContours

7.2 轮廓检测findContours 7.2.1 轮廓查找findContours7.2.2 轮廓绘制drawContours图像轮廓是指图像中对象的边界,是图像目标的外部特征,这个特征对于图像分析、目标识别和理解更深层次的含义具有重要的作用。 7.2.1 轮廓查找findContours 图像的轮廓补单能够提供物体的边缘,…

Java练习题2020-2

"统计1到N的整数中,除了1和自身之外&#xff0c;至少还能被两个数整除的数的个数 输入说明&#xff1a;整数 N(N<10000)&#xff1b; 输出说明&#xff1a;符合条件的数的个数 输入样例&#xff1a;10 输出样例&#xff1a;3 (说明&#xff1a;样例中符合条件的3个数是…

安卓开发实例:方向传感器

调用手机的方向传感器&#xff0c;X轴&#xff0c;Y轴&#xff0c;Z轴的数值 activity_sensor.xml <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayoutxmlns:android"http://schemas.android.c…

檢測項目簡體字

某些項目可能要求代碼中不允許使用簡體字 安裝stcheck檢查 yarn add stcheck --dev在項目根目錄創建 st.config.json 文件 {"patterns": ["./**/*.(ts|js|tsx|jsx|vue|html)","!**/node_modules/**","!.git/**"],"gitignore&q…

UE5 Blueprint发送http请求

一、下载插件HttpBlueprint、Json Blueprint Utilities两个插件是互相依赖的&#xff0c;启用&#xff0c;重启项目 目前两个是Beta的状态&#xff0c;如果你使用的平台支持就可以使用&#xff0c;我们的项目因为需要取Header的值&#xff0c;所有没法使用这两个插件&#xff0…

从零开始搭建Prometheus+grafana服务器组件监控系统

服务器及相关组件监控 本文档主要记录了常用企业级服务器及各种组件的监控手段和监控部署方案&#xff0c;使企业可以实时感知服务器组件的健康状态&#xff0c;并在服务器或组件出现异常时及时做出反应。 本方案采用的Prometheusgrafana的方式实现对服务器及各种组件的监控&am…