Jsoncpp新手入门:集成与源码编译
网上查到的教程对新手不太友好,特此记录Jsoncpp的使用。
本篇内容基于Win10系统 VS 2019 Community ,Centos7系统gcc 4.8.5。
Linux系统依赖Cmake编译,需要先安装Cmake环境,参考:
Linux 编译安装 Cmake_三采的博客-CSDN博客
目录
JsonCpp介绍
什么是JsonCpp?
什么是C++11?
JsonCpp集成方式
一、JsonCpp源代码——超级简单,推荐!!!
二、Windows VS 编译静态库
V1.9.2版本编译报错,未能成功编译
V1.9.3版本编译成功
三、Linux Cmake编译静态库
Windows VS JsonCpp静态库引用
Linux Cmake JsonCpp静态库引用
JsonCpp介绍
什么是JsonCpp?
https://github.com/open-source-parsers/jsoncpp
Releases · open-source-parsers/jsoncpp · GitHub
原文:
JsonCpp is a C++ library that allows manipulating JSON values, including serialization and deserialization to and from strings. It can also preserve existing comment in unserialization/serialization steps, making it a convenient format to store user input files.
谷歌翻译:
JsonCpp是一个C++库,它允许处理JSON值,包括在字符串之间进行序列化和反序列化。 它还可以在反序列化/序列化步骤中保留现有注释,从而使其成为存储用户输入文件的便捷格式。
原文:
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.y.z是使用C++ 11构建的。
0.y.z可以与较早的编译器一起使用。(适用于gcc 4.+版本)
00.11.z可以在新旧编译器中使用。(适用于gcc 5.+版本)
主要版本保持二进制兼容性。
什么是C++11?
C++11是C++编程语言的第三个官方标准,正式名叫ISO/IEC 14882:2011 - Information technology Programming languages C++ 。在正式标准发布前,被称为C++0x。
支持C++11的主流编译器
- GCC 4.8 及以上版本
- Clang 3.1 及以上版本
- VS 2013 及以上版本(有部分C++11特性不支持)
JsonCpp集成方式
一、JsonCpp源代码——超级简单,推荐!!!
https://github.com/open-source-parsers/jsoncpp/wiki/Amalgamated-(Possibly-outdated)
- 下载1.y.z版本ZIP包,解压
- python执行amalgamate.py
- 将dist目录下的两个.h文件和一个.cpp文件复制到项目代码文件目录下
- 在项目中添加现有项,加入上述文件
- 引用:#include "json.h"
- 其他:修改jsoncpp.cpp中的头文件为对应引用:#include "json.h"
二、Windows VS 编译静态库
https://github.com/open-source-parsers/jsoncpp/wiki/Build-with-VS-2019-on-Windows
V1.9.2版本编译报错,未能成功编译
V1.9.3版本编译成功
使用 VS 2019 Community 编译
1. 下载V1.9.3版本ZIP包,解压
2. 以管理员身份运行 Developer Command Prompt for VS 2019(即开发人员命令提示符)
- 方法一:Windows搜索Developer Command Prompt for VS 2019
- 方法二:开始→Visual Studio 2019→Developer Command Prompt for VS 2019
3. 修改目录到JsonCpp目录
4. 新建build文件夹
5. 进入build文件夹
6. 执行命令:
cmake -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF ..
7. 在 .../build/lib/ 文件夹下生成lib库
- 生成Release版本lib库命令:
cmake --build . --config Release
- 生成Debug版本lib库命令:
cmake --build . --config Debug
三、Linux Cmake编译静态库
下载tar.gz源代码
tar zxvf jsoncpp-00.11.0.tar.gz
cd jsoncpp-00.11.0
mkdir -p build/debug
cd build/debug
cmake -DCMAKE_BUILD_TYPE=debug -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=ON -DARCHIVE_INSTALL_DIR=. -G "Unix Makefiles" ../..
make
头文件位于include/json文件夹中
静态库位于lib文件夹中
注意事项:如果gcc版本为4.8.5,有可能1.y.z版本会编译失败,需要升级gcc或者编译0.y.z版本
Windows VS JsonCpp静态库引用
- 附加包含目录(头文件目录):项目右键→属性→配置属性→C/C++→常规→附加包含目录
- 附加库目录(库文件目录):项目右键→属性→配置属性→链接器→常规→附加库目录
- 附加依赖项(库文件名):项目右键→属性→配置属性→链接器→输入→附加依赖项
示例:
编辑附加包含目录,新建:D:\Software\JsonCpp\jsoncpp-1.9.3\include
编辑附加库目录,新建:D:\Software\JsonCpp\jsoncpp-1.9.3\build\lib\Release
编辑附加依赖项,添加:jsoncpp.lib
引用:#include "json/json.h"
注意:
一般来讲,VS2017编译的lib库只能在不低于VS2017的环境下使用,少数情况下只能在VS2017的环境下使用,因此推荐直接使用源代码的方式集成,不会出现因静态库编译环境问题导致的报错。
自编库引用时如果配置了附加包含目录、附加库目录、附加依赖项后仍然提示找不到,可将附加包含目录、附加库目录中的绝对路径修改为相对路径再次应用。
Linux Cmake JsonCpp静态库引用
创建工程目录(不是必须,建议用此类方式管理项目)
工程结构 | 说明 |
build | 编译文件夹 |
include | 存放 .h 头文件 |
lib | 存放 .a 链接库 |
src | 存放 .cpp 源文件 |
CMakeLists.txt | 编译命令 |
将头文件放入include文件夹
将链接库放入lib文件夹
在CMakeLists.txt中配置头文件和链接库:
# 添加头文件文件夹
INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/include""${PROJECT_SOURCE_DIR}/include/json"
)
# 添加链接库文件夹
LINK_DIRECTORIES("${PROJECT_SOURCE_DIR}/lib"
)# 生成可执行文件demo
ADD_EXECUTABLE(demo ${PROJECT_SOURCE_DIR}/src/main.cpp)
# 链接库到可执行文件demo
TARGET_LINK_LIBRARIES(demo libjsoncpp.a)
在代码中引入头文件:
#include "json/json.h"
可执行文件编译:
cd build
cmake ..
make VERBOSE=1
参考资料:
https://github.com/open-source-parsers/jsoncpp
Jsoncpp新手入门:集成与源码编译相关推荐
- 第8篇:Flowable-Modeler集成之Flowable-modeler源码编译
接上一篇: 第7篇:Flowable-Modeler集成之Flowable源码编译 https://blog.csdn.net/weixin_40816738/article/details/1028 ...
- 第7篇:Flowable-Modeler集成之Flowable源码编译
接上一篇: 第6篇:Flowable-Modeler详述之常见问题Table act_ge_property doesn't exist https://blog.csdn.net/weixin_40 ...
- Spark入门教程(二)Spark2.2源码编译及安装配置
Spark2.2源码下载 点此进入官网下载地址: 下载Spark spark官网下载截图 //下载好后用传输工具传输到我们的linux上并解压缩 tar -zxvf spark-2.2.0.tgz 源 ...
- postgresql源码学习(一)—— 源码编译安装与gdb调试入门
一. postgresql源码编译安装 因为只是用来调试的测试环境,把基本的软件装好和库建好就可以,一切从简. 1. 创建用户和目录 mkdir -p /data/postgres/base/ mkd ...
- 安装包没意思?带你手动下载OpenWrt源码编译安装!
一.OpenWrt的代码管理工具 OpenWrt社区同时使用Subversion和Git两种工具来管理代码. 备注:OpenWrt的外围代码已经逐渐转到github提供的Git托管空间上,直到2016 ...
- 干货|TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法工程师 安装平台 1 平台 目前Tensor ...
- 如何在ARM开发板上从源码编译安装OpenCV和OpenCV contrib
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文主要介绍如何在ARM开发板上从源码编译安装OpenCV和OpenCV contrib. OpenC ...
- 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...
- python源码编译 mingw_使用mingw32 在windows python26 下编译安装4suite-xml
最近在研究python下xml处理技术,需要在windows python26平台下安装4suite-xml. 但是4suite-xml在官网上只提供的最新安装包只支持到python25,也就是说只能 ...
最新文章
- scanf的拓展用法——匹配特定字符
- Ubuntu18.04之boost警告报错
- 推荐2款在线Ascii画图工具
- Android 使用字符串动态获取资源ID
- 121道分布式面试题和答案
- 计算机ps特效教程,PS教程:Photoshop制作模特水滴飞溅特效
- BI报表工具有哪些?
- Microbiome:中国科学家完成鸡肠道微生物宏基因集的构建(一作解读,张和平、魏泓、秦楠点评)
- flutter 屏幕截图,超出屏幕部分截图
- linux下c/c++实例之三只允许单个程序运行
- 视频会议设备大比拼,创新让科技更好的服务社会!
- MP2459被完美替代内部集成有功率MOSFET管FS2459的60V0.5A降压IC
- 第二次结对编程——电梯调度算法UI贾伟王伟东
- 【算法千题案例】每日一练LeetCode打卡——108.独特的电子邮件地址
- 陶哲轩实分析:微积分基本定理剖析
- 5个技巧打造令人印象深刻的LOGO
- 记录CentOS8 开机卡住的问题解决过程
- mpvue【微信小程序】下拉刷新 上拉刷新
- Onvif/RTSP安防流媒体服务-配置CDN加速互联网直播
- 《惢客创业日记》2020.07.18-19(周六)谦逊的野人-马斯克