网上查到的教程对新手不太友好,特此记录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

Logo

更多推荐