旧版jsoncpp编译

1、预备条件:

JsonCPP类库http://sourceforge.net/projects/jsoncpp/?source=dlp
SCONS编译器http://sourceforge.net/projects/scons/?source=dlp
Pythonhttp://www.python.org/

JsonCPP类库需要Scons编译器来编译,而Scons需要Python安装了才能使用。具体安装步骤请参见文件夹下的ReadMe文件。

2、

安装scons:

sudo apt-get install scons

解包jsoncpp:

tar -zxf jsoncpp-src-0.5.0.tar.gz

jsoncpp安装:

解包后进入其目录。输入以下命令:

scons platform=linux-gcc 就会安装成功

3、

上述已经完成jsoncpp的编译,在解压目录jsoncpp-src-0.5.0/libs/linux-gcc-7/下可以看到生成了两个文件:

libjson_linux-gcc-7_libmt.alibjson_linux-gcc-7_libmt.so

把.a 和.so 文件拷贝到/usrl/lib 目录下(参考了不同资料,说法并不统一,有的是拷贝到/lib下,有的则是/usr/local/lib),可以为了方便编译给它改个名字libjsoncpp.a

同样,将解包目录下的(jsoncpp-src-0.5.0)的include拷贝到/usr/lib下面。

sudo mv include/json/ /usr/include/

代码测试:

#include<json/json.h>
#include<iostream>
using namespace std;int main(int argc, char** argv)
{Json::Value root;
Json::FastWriter fast;
root["ModuleType"]= Json::Value("你好");
root["ModuleCode"]= Json::Value("22");
root["ModuleDesc"]= Json::Value("33");
root["DateTime"]= Json::Value("44");
root["LogType"]= Json::Value("55");
cout<<fast.write(root)<<endl;
return 0;
}

编译的语句:

huqin@ubuntu:~/bstr/json$ g++ main.cpp -o main -L/home/huqin/bstr/json/Deps/lib32/libjsoncpp.a /home/huqin/bstr/json/Deps/lib32/libjsoncpp.a

运行结果:

huqin@ubuntu:~/bstr/json$ ./main
{"DateTime":"44","LogType":"55","ModuleCode":"22","ModuleDesc":"33","ModuleType":"▒▒▒"}huqin@ubuntu:~/bstr/json$

新版jsoncpp编译

github地址:GitHub - open-source-parsers/jsoncpp: A C++ library for interacting with JSON.

## 使用源文件编译未编库

在github上下载好以后,在命令行下进入该项目所在的地址,直接执行python amalgamate.py命令,会在dist目录下生成两个头文件和一个源文件json-forwards.h 、json.h和jsoncpp.cpp。因为jsoncpp源码就四五千行,直接放在jsconcpp.cpp中和工程中其他代码一起编译也比较方便。

huqin@ubuntu:~/bstr/json/jsoncpp-master$ ./amalgamate.py
#include <iostream>
#include "json/json.h"
using namespace std;//封装json类
class JsonParse
{
public:JsonParse(Json::Value J):m_json(J){};JsonParse(const void *V):m_str(V ? (const char*)V : ""){};JsonParse(const char *S):m_str(S ? S : ""){};JsonParse(const char *S, int L):m_str(S ? S : "", S ? L : 0){};JsonParse(std::string S):m_str(S){};virtual ~JsonParse(){};public:std::string toString(const char* indent=""){if(m_json.isObject() && m_json.getMemberNames().size() == 0)return "";else if(m_json.isString())return m_json.asString();Json::StreamWriterBuilder builder;if(indent)builder["indentation"] = indent; //The JSON document is written in a single line if indent == ""return Json::writeString(builder, m_json);};const char* toCString(const char* indent=""){m_str = toString(indent);return m_str.c_str();};bool toJson(Json::Value &J){bool ret = false;JSONCPP_STRING errs;Json::CharReaderBuilder builder;Json::CharReaderBuilder::strictMode(&builder.settings_);//builder["collectComments"] = false; // true = 允许在反序列化的时候保存注释,然后在序列化的时候写回注释Json::CharReader* reader = builder.newCharReader();ret = reader->parse(m_str.data(), m_str.data() + m_str.size(), &J, &errs);if(!ret || !errs.empty())cout<<"error、"<<endl;if(reader){delete reader;reader = NULL;}return ret;}std::string formatMinSize(){/** 仅支持构造入参为字符串的形式* 如果是Json::Value的构造形式,可以直接格式化成指定的indent*/if(!m_str.empty())toJson(m_json);return toString();}private:std::string m_str;Json::Value m_json;
};int main(int argc, char *argv[])
{Json::Value boot;/* const char* / std::string -> JSON (除了首尾的分号其他分号必须加转义字符否则格式错误)*/JsonParse("{ \"datatype\":1,\"sessionId\" : 55,\"streamId\" : 55 ,\"string\" : \"sting recv\" }").toJson(boot);cout<<"string:" <<boot["string"].asCString() <<endl;return 0;
}
//运行结果:
huqin@ubuntu:~/bstr/json$ g++ main.cpp jsoncpp.cpp -o newmain
huqin@ubuntu:~/bstr/json$ ./newmain
string:sting recv

## 使用源码编译库使用

准备工作下载cmake编译工具

卸载旧版cmake: $ sudo apt-get autoremove cmake
文件下载:$ wget https://cmake.org/files/v3.12/cmake-3.12.2-Linux-x86_64.tar.gz
解压:$ tar zxvf cmake-3.12.2-Linux-x86_64.tar.gz
创建软连接:先检查解压后的cmake文件路径,我的在/home/huqin/bstr/json/下:
sudo ln -sf /home/huqin/bstr/json/cmake-3.12.2-Linux-x86_64/bin/*  /usr/bin/
能检查出cmake --version说明cmake安装成功: $ cmake --version

下载camke可以编译版本: GitHub - open-source-parsers/jsoncpp at 00.11.z

//解压
unzip jsoncpp-00.11.z.zip
//进入目录使用cmake生成Makefile
cd jsoncpp-00.11.z/
cmake CMakeLists.txt
//编译生成库
make

编译上面测试用例:

使用静态库直接连接动态库路径
g++ main.cpp -o libmain /home/huqin/bstr/json/jsoncpp-00.11.z/lib/libjsoncpp_static.a
使用动态库首先将动态库拷贝到可检测目录
sudo cp /home/huqin/bstr/json/jsoncpp-00.11.z/lib/libjsoncpp.so /usr/local/lib/
g++ main.cpp -o libmain -ljsoncpp
huqin@ubuntu:~/bstr/json$ ./libmain
string:sting recv

整体测试demo包含生成的库及jsoncpp、cmake源码:

链接:https://pan.baidu.com/s/1xeS4OTGfvDKsTrqkmraJgg

提取码:ykju

Linux中jsoncpp的编译使用相关推荐

  1. Linux中gcc的编译、静态库和动态库的制作

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 Linux中gcc的编译.静态库.动态库 文章目录: 1 gcc的编译过程 1.1 gcc的编译过程 1.2 gcc的常用参数 2 gcc 静态库的制 ...

  2. linux中安装,编译时调用,运行时调用,更新共享库

    一 创建并编译共享库 动态链接库一般以lib开头,形如libmymodule.so.1.0.0. 后面跟的三个版本号,从左到右的含义为: (1) 大版本号,当接口变得和之前不兼容,则新增一个大版本号. ...

  3. linux下的ant编译,linux 中部署ant编译的包中缺少问题

    Youth -Samuel Ullman Samuel Ullman(塞缪尔.厄尔曼) Youth is not a time of life,it is a state of mind;青春不是年华 ...

  4. linux中源码编译安装mysql常见错误

    一) #./configure --prefix=/usr/local/mysql-5.1.54 (mysql指定路径安装报错:) 如下: checking for termcap functions ...

  5. linux中在工作空间编译cpp,linux tensorflow2.4.0 c++ 编译

    1. bazel 版本要对应tensorflow的要求 2.tensorflow 源码 3.eigen 4.protobuf 版本要对应tensorflow的要求(workspace.bzl 提到了这 ...

  6. linux命令行运行c程序,如何在Linux中编写和运行C程序

    Linux正在成为开发人员的编程天堂,成为开源和免费操作系统. Turbo C编译器已经是一种编译程序的旧方法,所以让程序员转向Linux以获得新的编程环境. 在本文中,我们将解释如何编写,编译和运行 ...

  7. linux非标准头文件,Linux学习:unix的标准化的实现(Linux中各种限制-数据类型-各种标准化头文件介绍)...

    作为Linux的前身,unix标准化是十分重要的.我在这里挑几个重要的点说明. 1:Linux中各种限制.Linux中限制有编译时限制和运行时限制,另外有一些限制是由于我们的实现不同而不同,因此我们需 ...

  8. linux 全新编译安装,全新linux中通过编译方式安装nginx

    先去官网下载linux.tar.gz包 http://nginx.org/en/download.html 传到linxu中 解压tar包 在软件包nginx-1.15.9目录下对NGINX进行配置 ...

  9. Linux使用cmake编译项目,如何使用cmake在linux中构建Qt项目(How to build Qt project in linux with cmake)...

    如何使用cmake在linux中构建Qt项目(How to build Qt project in linux with cmake) 我使用的是ubuntu 14.04,cmake 2.8.12.2 ...

  10. linux中命令对c文件进行编译,Linux下C语言编译基础及makefile的编写

    这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: 源程序编译 Makefile的编写 程序库的链接 程序的调试 头文件和系统求助 1.源程序的编译 在L ...

最新文章

  1. linux编译动态库未定义,linux 编译动态链接库 so,避免运行时才发现函数未 ......
  2. linux 系统调用表 sys_call_table 获取方法
  3. 计算机初中教师资格教案,初中教师资格证教学设计
  4. 从windows上传文件到linux,中文名乱码解决方法
  5. fsimage文件丢失_Fsimage 与 EditLog定义及合并过程
  6. 镀铬亮条怎么修复_老车修复:翻新小改一辆破烂不堪的经典MINI,完美大变样...
  7. java接口有非抽象方法_如果一个类没有实现Java接口的所有抽象方法,会发生什么?...
  8. 4、Kafka常见问题
  9. python面试技巧_经典7大Python面试题!看完考官竟然给了我30k的薪资
  10. 数据加密 第四篇:对称密钥
  11. ASP.NET Core 在 IIS 上的进程内 (InProcess) 托管
  12. 进制转换--2进制转16进制
  13. Are you referring to request attributes outside of an actual web request
  14. 关于消息队列的一些思考
  15. 6种css3鼠标滑过动画效果
  16. mac系统和windows系统都有哪些不同
  17. 项目开发遇到前端传递时间问题处理
  18. 个推和极光推送技术介绍
  19. 服务器操作系统的维护,服务器操作系统维护
  20. 电子计算机主机房国标,根据国标GB50174-93《电子计算机机房设计规范》.ppt

热门文章

  1. 我想吃掉你的胰脏--影片--观后感
  2. 计算机视觉论文-2021-04-01
  3. Cognos函数(六) - total的使用
  4. Unity 5.3 官方VR教程(二) 创建第一个VR项目
  5. 电子电路计算机仿真应用,电力电子电路的计算机仿真
  6. Python基础 Day03 列表
  7. 建筑竞赛获奖项目解析国外教程
  8. linux 查看磁盘实际空间,如何运用linux查看磁盘总空间
  9. Python生成 一维条码
  10. python虚拟变量回归_第二周:python实现线性回归(哑变量回归)的高效方法