JsonCpp库学习记录

news2024/10/28 20:20:51

使用源码的方式

到JsonCpp的开源库仓库下载最新的发行版本

解压压缩包

使用Python生成源码文件

在本路径下cmd打开控制台,使用python编译(前提是python环境已安装)

python amalgamate.py

生成dist文件夹

jsoncpp为整合在一起的源码,可以直接放到项目中用

新建jsoncpp源码测试项目JsonCppDemo,在项目目录下新建文件夹jsonsrc

把上面编译出来的文件放到该文件夹下

在VS中右键添加现有项

把头文件和源码放进去项目中

在main函数中引入json.h头文件,使用以下的demo代码进行验证

int main()

{

    std::cout << "Hello JsonCpp!\n";

    // 创建Json对象

    Json::Value root;

    // 创建一个Json解析器

    Json::Reader reader;

    // 需要被转换的Json字符串

    std::string test = "{\"name\" : \"Adam\", \"age\" : 20, \"isMarried\" : false}";

    // 将Json字符串转换为Json对象

    bool parsingSuccessful = reader.parse(test, root);

    if (!parsingSuccessful) {

        // 如果转换失败,报告错误

        std::cout << "Failed to parse JSON : " << reader.getFormattedErrorMessages();

        return 1;

    }

    // 输出转换后的Json对象

    std::cout << "Name: " << root["name"].asString() << "\n";

    std::cout << "Age: " << root["age"].asInt() << "\n";

    std::cout << "isMarried: " << (root["isMarried"].asBool() ? "true" : "false") << "\n";

    return 0;

}

成功执行

使用静态库或者动态库的方式

使用CMake生成解决方案

在文件夹路径下cmd打开控制台,使用CMake(CMake环境已安装)生成VS编译器的解决方案,执行以下命令:

cmake -S . -B build -G "Visual Studio 16 2019" 其中,-S . 表示源码在当前目录,-B build表示生成的文件放在当前目录下的build子文件夹中,-G "Visual Studio 16 2019"表示生成适用于2019版的VS 16的解决方案。

最后会在当前目录生成一个build文件夹,进入该文件夹

使用VS 2019打开jsoncpp.sln解决方案

其中有两个工程负责生成lib库

jsoncpp_static工程是负责生成静态lib库文件,jsoncpp_lib工程主要负责生成dll库文件

首先我们来编译生成json

生成静态lib库

鼠标选到jsoncpp_static工程,解决方案配置选release,解决方案平台选x64(根据自己的引用工程进行配置)

右键选择重新生成

从生成的信息中找到生成的静态库lib

使用VS新建静态库测试工程JsonCppStaticLib,把jsoncpp-1.9.5工程下的include文件夹移到JsonCppStaticLib项目的文件夹下

同时在JsonCppStaticLib项目下新建lib文件夹

把上面在jsoncpp编译出来的静态文件放到\lib\x64\release路径下

最好通过路径命名来区别不同编译环境下编译出来的库

右键项目属性,打开"C/C++" -> “常规”,然后在“附加包含目录”中加入头文件所在路徑。

在链接器选项里设置。在"链接器" -> "常规"部分的"附加库目录"填写.lib文件所在的目录。

选择"链接器" -> “输入”,然后在"附加依赖项"那里添加.lib文件

完成后继续使用上面的例子,引入json.h文件,重新编译运行

生成动态dll库

鼠标选到jsoncpp_li工程,解决方案配置选release,解决方案平台选x64(根据自己的引用工程进行配置)

右键重新生成解决方案

可以看到一共生成3个文件jsoncpp.exp,jsoncpp.lib和jsoncpp.dll

.exp文件是导出文件,主要用于动态链接库(DLL)的创建过程中。在创建DLL时,会生成一个.exp文件和一个.lib文件。.exp文件包含了DLL中所有导出函数的信息,而.lib文件是一个导入库文件,用于在编译时链接到对应的DLL; 如果应用程序需要使用DLL中的函数或变量,那么就需要在构建应用程序时链接该.lib文件,然后在运行时,应用程序通过在.exp文件中找到的导出信息,来加载和使用DLL。

可以看得出来,静态库生成的lib比动态库生成的lib大的多

使用VS新建静态库测试工程JsonCppLib,把jsoncpp-1.9.5工程下的include文件夹移到JsonCppLib项目的文件夹下

按照添加静态库的方式

同时在JsonCppLib项目下新建lib文件夹

把上面在jsoncpp编译出来的静态文件放到\lib\x64\release路径下

最好通过路径命名来区别不同编译环境下编译出来的库

右键项目属性,打开"C/C++" -> “常规”,然后在“附加包含目录”中加入头文件所在路徑。

在链接器选项里设置。在"链接器" -> "常规"部分的"附加库目录"填写.lib文件所在的目录。

选择"链接器" -> “输入”,然后在"附加依赖项"那里添加.lib文件

完成后继续使用上面的例子,引入json.h文件,重新编译运行

提示程序运行时缺少dll文件,我们找到生成的可执行文件的位置,把编译出来的dll文件放到同一个文件夹中

这次重新运行

执行成功

问题注意

刚开始编译时出现了编译失败的报错

出现这个问题的原因是项目使用了debug模型,但是jsoncpp_static.lib又是在release下编译出来的,所以用到的项目解决方案配置和平台要保持一致

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

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

相关文章

vue 解决:npm ERR! code ERESOLVE 及 npm ERR! ERESOLVE could not resolve 的方案

1、问题描述&#xff1a; 其一、需求为&#xff1a; 想要安装项目所需依赖&#xff0c;成功运行 vue 项目&#xff0c;想要在浏览器中能成功访问项目地址 其二、问题描述为&#xff1a; 在 package.json 文件打开终端平台&#xff0c;通过执行 npm install 命令&#xff0c…

6,000 个网站上的假 WordPress 插件提示用户安装恶意软件

黑客使用窃取的凭证感染 WordPress 网站&#xff0c;并向其发送虚假插件&#xff0c;通过虚假的浏览器更新提示向最终用户发送恶意软件和信息窃取程序。 该恶意活动基于ClickFix假浏览器更新恶意软件的新变种&#xff0c;自 2024 年 6 月以来已使用假 WordPress 插件感染了超过…

QT 机器视觉 1.相机类型

本专栏从实际需求场景出发详细还原、分别介绍大型工业化场景、专业实验室场景、自动化生产线场景、各种视觉检测物体场景介绍本专栏应用场景 更适合涉及到视觉相关工作者、包括但不限于一线操作人员、现场实施人员、项目相关维护人员&#xff0c;希望了解2D、3D相机视觉相关操作…

【问题解决】pnpm : 无法将“pnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

今天配置完poetry环境变量之后pnpm不能用了 具体报错 pnpm : 无法将“pnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。 所在位置 行:1 字符: 1pnpm run dev~~~~ Ca…

【加密系统】华企盾DSC服务台提示:请升级服务器,否则可能导致客户端退回到旧服务器的版本

华企盾DSC服务台提示&#xff1a;请升级服务器&#xff0c;否则可能导致客户端退回到旧服务器的版本 产生的原因&#xff1a;控制台版本比服务器高导致控制台出现报错 解决方案 方法&#xff1a;将控制台回退到原来的使用版本&#xff0c;在控制台负载均衡查看连接该服务器各个…

若依框架部署到服务器后头像资源访问404

排错过程 第一开始以为是代理出问题了 官网给出的解决方案 第一种是用代理后端接口&#xff0c;第二种是重写路径直接访问静态文件 接口通过捕获profile开头的路径/profile/avatar…&#xff0c;转为/home…/avatar找到我们在该路径下的文件 但是我想了一下&#xff0c;我ngin…

基于Flink搭建流式湖仓OpenLake方案

OpenLake解决方案建立在开放可控的OpenLake湖仓之上&#xff0c;提供大数据搜索与AI一体化服务。通过元数据管理平台DLF管理结构化、半结构化和非结构化数据&#xff0c;提供湖仓数据表和文件的安全访问及IO加速&#xff0c;并支持大数据、搜索和AI多引擎对接。本文为您介绍以F…

windows下使用nvm进行多版本nodejs管理

目录 一&#xff1a;背景 二&#xff1a;nvm的介绍 三&#xff1a;环境切换使用 一&#xff1a;背景 最近在开发node js的项目&#xff0c;其中一个项目的前端和后台使用了两个node版本&#xff0c;因此需要不同的环境配置来进行开发任务&#xff0c;刚好nvm这个插件可以实现…

探索三维世界的奥秘:如何在Cesium中实现惊艳的双面渲染效果

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

掌握未来技术:KVM虚拟化安装全攻略,开启高效云端之旅

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&#…

RabbitMQ的Overview Totals是空

一、问题描述 RabbitMQ 版本&#xff1a;4.0.2&#xff0c;Erlang 版本&#xff1a;26.2.5.4。 RabbitMQ 页面管理(rabbitmq_management)的 Overview > Totals 是空&#xff1a; 二、原因分析 RabbitMQ 的配置&#xff1a; management_agent.disable_metrics_collector…

从0到1学习node.js(express模块)

文章目录 Express框架1、初体验express2、什么是路由3、路由的使用3、获取请求参数4、电商项目商品详情场景配置路由占位符规则5、小练习&#xff0c;根据id参数返回对应歌手信息6、express和原生http模块设置响应体的一些方法7、其他响应设置8、express中间件8.1、什么是中间件…

轻松部署自己的AI聊天助手LocalGPT并实现无公网IP远程交互

文章目录 前言环境准备1. localGPT部署2. 启动和使用3. 安装cpolar 内网穿透4. 创建公网地址5. 公网地址访问6. 固定公网地址 前言 本文主要介绍如何本地部署LocalGPT并实现远程访问&#xff0c;由于localGPT只能通过本地局域网IP地址端口号的形式访问&#xff0c;实现远程访问…

雷池社区版中升级雷池遇到问题

关于升级后兼容问题 版本差距过大会可能会发生升级后数据不兼容导致服务器无法起来 跨多个版本&#xff08;超过1个大版本号&#xff09;升级做好数据备份&#xff0c;遇到升级失败可尝试重新安装解决 升级提示目录不对 在错误的目录下执行&#xff08;比如 safeline 的子目…

【WRF数据准备】基于GEE下载静态地理数据-叶面积指数LAI及绿色植被率Fpar

【WRF数据准备】基于GEE下载静态地理数据 准备:WRF所需静态地理数据(Static geographical data)数据范围说明基于GEE下载叶面积指数及绿色植被率GEE数据集介绍数据下载:LAI(叶面积指数)和Fpar(绿色植被率)数据处理:基于Python处理为单波段LAI数据参考GEE的介绍可参见另…

分布式理论基础

文章目录 1、理论基础2、CAP定理1_一致性2_可用性3_分区容错性4_总结 3、BASE理论1_Basically Available&#xff08;基本可用&#xff09;2_Soft State&#xff08;软状态&#xff09;3_Eventually Consistent&#xff08;最终一致性&#xff09;4_总结 1、理论基础 在计算机…

技术周总结 10.21~10.27周日

文章目录 一、10.24 周四 程序员节2.1&#xff09;问题01&#xff1a; Memory Analysis Tool的使用方法 二、10.27 周日2.1&#xff09; J2EE架构J2EE 的核心组件与技术J2EE 的多层架构J2EE 的优缺点J2EE 的应用场景 2.2&#xff09;web应用开发中的 "web服务器" 和 …

AGI 之 【Dify】 之 Dify 在 Windows 端本地部署调用 Ollama 本地下载的大模型,实现 API 形式进行聊天对话

AGI 之 【Dify】 之 Dify 在 Windows 端本地部署调用 Ollama 本地下载的大模型&#xff0c;实现 API 形式进行聊天对话 目录 AGI 之 【Dify】 之 Dify 在 Windows 端本地部署调用 Ollama 本地下载的大模型&#xff0c;实现 API 形式进行聊天对话 一、简单介绍 二、创建一个聊…

ReactNative TurboModule(3)

ReactNative TurboModule 简述 ReactNative新架构的两个核心支柱是TurboModule和Fabric渲染器&#xff0c;前者的功能是提供一个Native的模块&#xff0c;比如蓝牙之类的&#xff0c;后者则是提供一个自定义Native UI组件的能力&#xff0c;ReactNative本身虽然提供了非常多的…

Python 中 {} 是 set 还是 dict

先说结论&#xff1a; {} 是 dict 字典。 一、描述 在 Python 中&#xff0c;我们可以用如下&#xff0c;表示一个集合 set my_set {1, 2, 3, 4, 5, 6} 也可以用如下&#xff0c;表示一个字典 dict my_dict {1:10, 2:20, 3:30, 4:40} 不管是集合还是字典&#xff0c;都…