编译JSONCPP源码

        在一个项目当中如果想要数据持久话,要么将数据存入数据库,要么将数据以文件的形式进行存储,一般的有JSON文件,XML文件。笔者认为XML文件实在有些繁琐,还是JSON文件更加简洁一些。C++标准库单中并没对JSON文件的支持,所以我们需要用到第三方库JSONCPP。不过网上很多资料都是交大叫如何将这个第三方库编译成静态库,然后引入到自己的项目当中进行编译,这样做倒也是没有什么问题,但是有个缺点是,如果第三方库存在什么问题的话,在debug时我们只能看到它报错,但是我们没有办法看到具体的原因,因为我们的项目当中没有源码。所以笔者在这里就要给大家介绍一下如何在自己的项目当中编译JSONCPP源码。

1、下载JSONCPP源码

        JSONCPP源码下载 首先我们需要到github上面去下载源代码(这里建议开加速器,不然很可能会链接不上)打开网站

选择最新的发行版本,点击蓝色的链接

点击下载此压缩包,即可完成下载。当然也可以去克隆这个项目,但是笔者经常遇到一个项目克隆不下来,或者克隆速度非常慢的情况(github的国内网络链接状况真的非常的糟糕)。

2、观察一下文件

        先将文件进行解压

需要用到的文件有include文件和src文件

如果有经验的朋友就会知道,国内外很多项目都会把源码放在src文件当中,头文件放在include文件当中

3、创建一个空的项目将上面的两个文件复制到自己项目下面

这里笔者建立一个叫JSONCPP的项目,将上面的两个文件放在这个项目的下边

有关CMake文件删除掉,这两个文件当中所有的CMakeLists.txt文件,以及*.cmake文件都要删除掉

然后将两个文件夹包括在项目当中

4、设置JSONCPP项目

右键JSONCPP项目,点击属性对JSONCPP项目进行设置

具体修改的设置如下

检查静态库能否编译成功

右键点击JSONCPP项目,然后点击生成

如果看到下面的信息那么表示静态库生成成功

5、引用JSONCPP项目

新建一个测试用的项目Demo

右键点击解决方案,添加->新建项目

创建一个空项目即可,添加Demo.cpp文件。(跟大家平时创建项目一摸一样这里就不演示了)

Demo项目进行配置,需要修改的地方如下

引用JSONCPP项目,右键Demo项目添加->引用->选择JSONCPP项目

将Demo项目设置为启动项

6、测试项目配置结果

在Demo.cpp文件当中使用下面的代码进行测试

#include "json/json.h"
#include <iostream>
#include <memory>
/**
 * \brief Parse a raw string into Value object using the CharReaderBuilder
 * class, or the legacy Reader class.
 * Example Usage:
 * $g++ readFromString.cpp -ljsoncpp -std=c++11 -o readFromString
 * $./readFromString
 * colin
 * 20
 */
int main() {
    const std::string rawJson = R"({"Age": 20, "Name": "colin"})";
    const auto rawJsonLength = static_cast<int>(rawJson.length());
    constexpr bool shouldUseOldWay = false;
    JSONCPP_STRING err;
    Json::Value root;

    if (shouldUseOldWay) {
        Json::Reader reader;
        reader.parse(rawJson, root);
    }
    else {
        Json::CharReaderBuilder builder;
        const std::unique_ptr<Json::CharReader> reader(builder.newCharReader());
        if (!reader->parse(rawJson.c_str(), rawJson.c_str() + rawJsonLength, &root,
            &err)) {
            std::cout << "error" << std::endl;
            return EXIT_FAILURE;
        }
    }
    const std::string name = root["Name"].asString();
    const int age = root["Age"].asInt();

    std::cout << name << std::endl;
    std::cout << age << std::endl;
    return EXIT_SUCCESS;
}

结果如下

 

到此整个项目配置成功

7、这样做的好处

        这样做带来的好处就是,我们在调试的过程当中可以进入到第三方框架的源码当中看到具体的细节。我们在某个地方打上断点

进入调试

我们可以看到我们跳转到了json_value.cpp文件当中。

8、总结

        上面的步骤光是考虑程序运行的话,其实引入静态库和头文件也可以办到,但是对于一个严格的项目而言能够明确知道源代码也是相当重要的。所以进行上面步骤的目的就是为了能够在自己的项目当中调试第三方框架的源代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值