Openssl数据安全传输平台010:jasoncpp 1.9.5编译及常用API- Windows/Centos8-含测试代码

文章目录

  • 0. 代码仓库
  • 1 安装注意版本问题
    • 1.1 windows 下的安装
      • 1.1.1 使用cmake生成sln工程
      • 1.1.2 使用sln工程生成静态库 -Debug
    • 1.2 Linux 下的安装
      • 1.2.1 安装jsoncpp
      • 1.2.2 旧版本0.10.x版本相关环境配置问题
  • 2 Winsows环境下编译 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 安装注意版本问题

A note on backward-compatibility

  • 1.y.z is built with C++11.
  • 0.y.z can be used with older compilers.
  • 00.11.z can be used both in old and new compilers.

Major versions maintain binary-compatibility.
在这里插入图片描述

1.1 windows 下的安装

  • 在windows下 将 jsoncpp-1.9.5.zip解压缩

  • 进入到解压目录jsoncpp-1.9.5, 在进入到子目录cmake

  D:\ProgramData\jsoncpp\jsoncpp-1.9.5

1.1.1 使用cmake生成sln工程

在这里插入图片描述
在这里插入图片描述
选中Shared Libs,以后生成的就是动态库。

点击generate,生成了sln工程

在这里插入图片描述

1.1.2 使用sln工程生成静态库 -Debug

在这里插入图片描述

  • 生成的静态库存储目录D:\ProgramData\jsoncpp\build\lib\Debug

  • 生成的静态库文件: jsoncpp.lib

    在这里插入图片描述

  • 使用的准备工作:

    • 将静态库jsoncpp.lib拿出备用
    • 将库对应的头文件拿出, 在原始的下载源码包里,头文件目录D:\ProgramData\jsoncpp\jsoncpp-1.9.5\include\json

在这里插入图片描述

  • 把文件拿出来备用,或者直接在VS 项目配置中添加相应的路径和库名字

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

1.2 Linux 下的安装

1.2.1 安装jsoncpp

git clone https://github.com/Microsoft/vcpkg.git
./vcpkg install jsoncpp

在这里插入图片描述
vkpkg生成的文件参考

/home/beza/Desktop/jsoncpp/vcpkg/installed/x64-linux// 将这个Debug文件拷贝到Centos的/lib目录
/home/beza/Desktop/jsoncpp/vcpkg/installed/x64-linux/debug/lib/libjsoncpp.a//这个版本不知道是什么版本,没有测试
/home/beza/Desktop/jsoncpp/vcpkg/installed/x64-linux/lib/libjsoncpp.a// 拷贝json的头文件到系统目录中, 需要管理员权限
/home/beza/Desktop/jsoncpp/vcpkg/installed/x64-linux/include
/home/beza/Desktop/jsoncpp/vcpkg/installed/x64-linux/include/json
/home/beza/Desktop/jsoncpp/vcpkg/installed/x64-linux/include/json/allocator.h
/home/beza/Desktop/jsoncpp/vcpkg/installed/x64-linux/include/json/assertions.h
/home/beza/Desktop/jsoncpp/vcpkg/installed/x64-linux/include/json/config.h
/home/beza/Desktop/jsoncpp/vcpkg/installed/x64-linux/include/json/forwards.h
/home/beza/Desktop/jsoncpp/vcpkg/installed/x64-linux/include/json/json.h
/home/beza/Desktop/jsoncpp/vcpkg/installed/x64-linux/include/json/json_features.h
/home/beza/Desktop/jsoncpp/vcpkg/installed/x64-linux/include/json/reader.h
/home/beza/Desktop/jsoncpp/vcpkg/installed/x64-linux/include/json/value.h
/home/beza/Desktop/jsoncpp/vcpkg/installed/x64-linux/include/json/version.h
/home/beza/Desktop/jsoncpp/vcpkg/installed/x64-linux/include/json/writer.h
// 将生成的动态库/静态库拷贝到系统的库目录中, 需要管理员权限,centos是gcc7//拷贝动态库--注意这里是Debug版本
sudo cp /home/beza/Desktop/jsoncpp/vcpkg/installed/x64-linux/debug/lib/libjsoncpp.a  /lib// 拷贝json的头文件到系统目录中, 需要管理员权限
sudo cp /home/beza/Desktop/jsoncpp/vcpkg/installed/x64-linux/include/json /usr/include/ -r// 更新, 这样才能搜索到动态库libjsoncpp.a。需要管理员权限
sudo ldconfig    

1.2.2 旧版本0.10.x版本相关环境配置问题

要安装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配环境时候出现以下错误
    在这里插入图片描述

2 Winsows环境下编译 c++ 测试文件: json-test.cpp

g++ json-test.cpp -ljsoncpp -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.mzph.cn/news/123413.shtml

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

相关文章

nginx请求时找路径问题

nginx请求时找路径问题 你是否遇到过这样的情况&#xff1a; 当你安装了nginx的时候&#xff0c;为nginx配置了如下的location&#xff0c;想要去访问路径下面的内容&#xff0c;可是总是出现404&#xff0c;找不到文件&#xff0c;这是什么原因呢&#xff0c;今天我们就来解…

服务器数据恢复—nas硬盘故障导致raid6失效、存储无法访问的数据恢复案例

服务器故障&分析&#xff1a; 一台nas存储中有一组由十几块硬盘组建的raid6磁盘阵列。 nas存储中的raid6阵列成员盘出现故障离线&#xff0c;磁盘阵列崩溃&#xff0c;nas存储无法正常访问。 北亚企安数据恢复工程师将nas存储内的所有硬盘编号后取出&#xff0c;经过硬件工…

MGRE环境下的OSPF

实验拓扑 需求 1 R6为ISP只能配置IP地址&#xff0c;R1-R5的环回为私有网段 2 R1/4/5为全连的MGRE结构&#xff0c;R1/2/3为星型的拓扑结构&#xff0c;R1为中心站点 3 所有私有网段可以互相通讯&#xff0c;私有网段使用OSPF完成。 IP规划 配置IP R1 # interface GigabitEt…

Kitex踩坑 [Error] KITEX: processing request error,i/o timeout

报错问题 2023/010/28 17:20:10.250768 default_server_handler.go:234: [Error] KITEX: processing request error, remoteService, remoteAddr127.0.0.1:65425, errordefault codec read failed: read tcp 127.0.0.1:8888->127.0.0.1:65425: i/o timeout 分析原因 Hert…

Ps:对象选择工具

对象选择工具 Object Selection Tool是 Photoshop 2020 版以后新增的选区工具&#xff0c;可用于自动选择图像中的对象或区域&#xff0c;如人物、汽车、宠物、天空、水、建筑物和山脉等。 快捷键&#xff1a;W 让对象选择工具自动检测并选择图像内的对象或区域&#xff0c;或者…

3.7 移动端TB(D)R架构基础

一、各类电子设备功耗对比 桌面级主流性能平台&#xff0c;功耗一般为300W&#xff08;R7/I7X60级别显卡&#xff09;&#xff0c;游戏主机150-200W入门和旗舰游戏本平台功耗为100W主流笔记本为50-60W&#xff0c;超极本为15-25W&#xff0c;旗舰平板为8-15W旗舰手机为5-8W&am…

【Linux】部署单体项目以及前后端分离项目(项目部署)

一、简介 以下就是Linux部署单机项目和前后端分离项目的优缺点&#xff0c;希望对你有所帮助。 1、Linux部署单机项目&#xff1a; 优点&#xff1a; 1.简化了系统管理&#xff1a;由于所有服务都在同一台机器上运行&#xff0c;因此可以简化系统管理和维护。 2.提高了性能&a…

Linux mv命令:移动文件或改名

mv 命令&#xff08;move 的缩写&#xff09;&#xff0c;既可以在不同的目录之间移动文件或目录&#xff0c;也可以对文件和目录进行重命名。该命令的基本格式如下&#xff1a; [rootlocalhost ~]# mv 【选项】 源文件 目标文件 -f&#xff1a;强制覆盖&#xff0c;如果目标文…

在Spring boot中 使用JWT和过滤器实现登录认证

在Spring boot中 使用JWT和过滤器实现登录认证 一、登录获得JWT 在navicat中运行如下sql,准备一张user表 -- ---------------------------- -- Table structure for t_user -- ---------------------------- DROP TABLE IF EXISTS t_user; CREATE TABLE t_user (id int(11) …

matlab simulink 直线一级倒立摆控制(自起摆和稳态控制)

1、内容简介 略 6-可以交流、咨询、答疑 2、内容说明 控制器设计 自起摆建模 规定正方向&#xff1a;顺时针为角度&#xff08;力矩&#xff09;正方向&#xff0c;向右为位移正方向。 在规定的正方向条件下&#xff0c;图 1 所示摆杆的角度φ为正值&#xff0c; 下车向右加…

NetSuite数据备份办法

本周有同学问有啥办法可以实现NetSuite的数据备份&#xff1f;这是个常见问题&#xff0c;今天总结一下。 我们认为可以选择的技术路线有下面几个&#xff1a; 从技术可行性、数据可利用角度&#xff0c;毫无疑问我们将推荐第三种办法。所以&#xff0c;今朝就介绍一下。 Ana…

[2021]不确定成本下的处理分配

英文题目&#xff1a;Treatment Allocation under Uncertain Costs 中文题目&#xff1a;不确定成本下的处理分配 单位&#xff1a;swager、uber 时间&#xff1a;2021 论文链接&#xff1a;https://arxiv.org/pdf/2103.11066.pdf 代码&#xff1a; 摘要&#xff1a; 我…

npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。

1 bug描述 使用vscode执行npm run dev指令时出现 “npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次 “ 的错误提示&#xff0c;原因是系统里没有安装n…

独创改进 | RT-DETR 引入 Asymptotic Hybrid Encoder | 渐进混合特征解码结构

本专栏内容均为博主独家全网首发,未经授权,任何形式的复制、转载、洗稿或传播行为均属违法侵权行为,一经发现将采取法律手段维护合法权益。我们对所有未经授权传播行为保留追究责任的权利。请尊重原创,支持创作者的努力,共同维护网络知识产权。 文章目录 网络结构实验结果…

数据结构时间复杂度(补充)和空间复杂度

Hello&#xff0c;今天事10月27日&#xff0c;距离刚开始写博客已经过去挺久了&#xff0c;我也不知道是什么让我坚持这么久&#xff0c;但是学校的课真的很多&#xff0c;很少有时间多出来再学习&#xff0c;有些科目马上要考试了&#xff0c;我还不知道我呢不能过哈哈哈&…

DAMNets

方法 体会 实验充分&#xff0c;不愧是ICLR&#xff0c;但作者未提供代码

stm32的ADC采样率如何通过Time定时器进行控制

ADC采样率是个跟重要的概念. 手册上说可以通过Timer定时器进行触发ADC采样. 可我这边悲剧的是, 无论怎么样. ADC都会进行采样. 而且就算是TIM停掉也是一样会进行采样. 这就让我摸不着头脑了… 我想通过定时器动态更改ADC的采样频率. 结果不随我愿… 这到底是什么问题呢? 一…

【精选】VMware部署ESXI6.5 vCenter Server详解

VMware部署ESXI6.5 vCenter Server 一、ESXi主机介绍1、虚拟机的好处2、为什么要使用虚拟机 二、虚拟化服务器概述1、VSphere物理架构2、体系架构3、VMware vSphere 组件 三、ESXi安装环境1、安装步骤2、使用VMware新建ESXi主机3、初始环境安装 四、创建虚拟机五、安装部署VMwa…

python之计算平面点集的的面积

在当今数据驱动的世界中&#xff0c;计算平面点集的最小外接轮廓面积被广泛应用于各种实际场景中。它是一项重要而魅力十足的任务&#xff0c;旨在找到一个最小的矩形或多边形区域&#xff0c;能够完全包围给定的离散点集。这个看似简单的问题背后隐藏着许多挑战&#xff0c;需…

轻量封装WebGPU渲染系统示例<7>-材质多pass(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/version-1.01/src/voxgpu/sample/MultiMaterialPass.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据和渲染机制分离。 …