Jsoncpp新手入门:集成与源码编译
网上查到的教程对新手不太友好,特此记录Jsoncpp使用过程中的一些问题。本篇内容基于Win10系统,因此安装在Mac或者Linux上的同学可以再找找其他的介绍文章。JsonCpp介绍什么是JsonCpp?https://github.com/open-source-parsers/jsoncpp原文:JsonCpp is a C++ library that allows manipulatin
网上查到的教程对新手不太友好,特此记录Jsoncpp的使用。
本篇内容基于Win10系统 VS 2019 Community ,Centos7系统gcc 4.8.5。
Linux系统依赖Cmake编译,需要先安装Cmake环境,参考:
目录
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
参考资料:
更多推荐
所有评论(0)