NVIDIA Jetson TX1 系列开发教程之十二:libcurl、RapidJSON安装
来源:互联网 发布:澳大利亚留学费用知乎 编辑:程序博客网 时间:2024/06/06 00:05
NVIDIA Jetson TX1 系列开发教程之十二:libcurl、RapidJSON安装
- 转载请注明作者和出处:http://blog.csdn.net/u011475210
- 嵌入式平台:NVIDIA Jetson TX1
- 嵌入式系统:Ubuntu16.04
- 编者: WordZzzz
- NVIDIA Jetson TX1 系列开发教程之十二libcurlRapidJSON安装
- 前言
- libcurl
- 简介
- 安装
- RapidJSON
- 简介
- 安装
前言
由于项目需要,WordZzzz最近尝试在TX1上解析服务器端传回json信息。先用Python3进行了测试,Python作为一门脚本语言,用来做测试简直棒极了。但是,我们最终还是要把代码移植到linux C上来进行实现。
虽说大家能看到这篇文章一般都是想直接解决问题的,但是我还是在此啰嗦几句,做个小小的科普。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。
JSON建构于两种结构:
- “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
- 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。 - 再详细点的话,就请进入传送门吧:http://www.json.org/json-zh.html。
用c在linux下实现json解析,需要两个工具,一个是可以实现http通信的工具,这里WordZzzz用的是libcurl(当然也可以用curl或者wget来模拟http的post和get);另一个是可以解析json信息的工具,这里WordZzzz用的是腾讯开源的RapidJSON(当然大家也可以尝试json-c等)。
libcurl
简介
- cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。
- cURL支持的通信协议有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。
- libcurl支持的平台有Solaris、NetBSD、FreeBSD、OpenBSD、Darwin、HP-UX、IRIX、AIX、Tru64、Linux、UnixWare、HURD、Windows、Symbian、Amiga、OS/2、BeOS、Mac OS X、Ultrix、QNX、BlackBerry Tablet OS、OpenVMS、RISC OS、Novell NetWare、DOS等。
- 想要了解更多信息,官网传送门:https://curl.haxx.se/
安装
1.下载libcurl源码:
$ git clone https://github.com/curl/curl.git
2.配置:
$ ./buidconf$ ./configure --enable-debug
第一步用于生成configure配置文件,第二步进行配置。可以./configure –help查看其他可选参数。我是默认安装openssl的,所以没有出现找不到openssl库的问题。如果遇到了就装一个,选择默认安装省事,自己指定安装目录比较麻烦。具体查看工程目录下的README。
3.编译&安装:
默认库文件安装在/usr/local/lib 头文件安装在/usr/local/include —>安装要root权限
$ make$ sudo make install
4.测试代码:
接下来写个测试代码来使用libcurl库(此测试代码下载指定URL的页面)。
测试代码摘自网络,如下:
// 采用CURLOPT_WRITEFUNCTION 实现网页下载保存功能 #include <stdio.h>; #include <stdlib.h>; #include <unistd.h>; #include <curl/curl.h>; #include <curl/types.h>; #include <curl/easy.h>; FILE *fp; //定义FILE类型指针 //这个函数是为了符合CURLOPT_WRITEFUNCTION而构造的 //完成数据保存功能 size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) { int written = fwrite(ptr, size, nmemb, (FILE *)fp); return written; } int main(int argc, char *argv[]) { CURL *curl; if (argc != 3) { fprintf(stderr, "usage: %s url filename\n", argv[0]); exit(-1); } curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_URL, argv[1]); if((fp = fopen(argv[2],"w")) == NULL) { curl_easy_cleanup(curl); exit(1); } //CURLOPT_WRITEFUNCTION 将后继的动作交给write_data函数处理 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); curl_easy_perform(curl); curl_easy_cleanup(curl); exit(0); }
5.查看库链接信息:
$ pkg-config --cflags --libs libcurl-I/usr/local/include -L/usr/local/lib -lcurl
返回信息如上,其中-I后面的是头文件路径,-L后面的是链接库路径,链接库名称为curl。
6.编译测试代码:
可以直接用nsight进行配置(详情参考我之前的nsight基础教程:http://blog.csdn.net/u011475210/article/details/72853170、nsight进阶教程:http://blog.csdn.net/u011475210/article/details/72860277),也可以直接手写gcc命令进行编译。
$ gcc -L/usr/local/lib -o test test.c -lcurl
7.编译完成,运行程序:
$ ./test
程序会将百度首页下载下来,存为index.html。
RapidJSON
简介
RapidJSON 是一个 C++ 的 JSON 解析器及生成器。它的灵感来自 RapidXml。
- RapidJSON 小而全。它同时支持 SAX 和 DOM 风格的 API。SAX 解析器只有约 500 行代码。
- RapidJSON 快。它的性能可与 strlen() 相比。可支持 SSE2/SSE4.2 加速。
- RapidJSON 独立。它不依赖于 BOOST 等外部库。它甚至不依赖于 STL。
- RapidJSON 对内存友好。在大部分 32/64 位机器上,每个 JSON 值只占 16 字节(除字符串外)。它预设使用一个快速的内存分配器,令分析器可以紧凑地分配内存。
- RapidJSON 对 Unicode 友好。它支持 UTF-8、UTF-16、UTF-32 (大端序/小端序),并内部支持这些编码的检测、校验及转码。例如,RapidJSON 可以在分析一个 UTF-8 文件至 DOM 时,把当中的 JSON 字符串转码至 UTF-16。它也支持代理对(surrogate pair)及 “\u0000”(空字符)。
- 想要了解更多信息,官网传送门:http://rapidjson.org/zh-cn/
安装
1.cmake:
采用cmake方式进行安装,所以cmake命令得有。
$ sudo apt-get install cmake
2.下载源码:
$ git clone https://github.com/Tencent/rapidjson.git
3.编译&安装:
$ cd rapidjson/$ mkdir build$ cd build$ cmake ..$ sudo make install
4.查看库链接信息:
$ pkg-config --cflags --libs RapidJSON-I/usr/local/include
可以发现只有头文件信息,我们只需要调用头文件而不需要链接库,所以很方便。
5.官方例程:
// rapidjson/example/simpledom/simpledom.cpp`#include "rapidjson/document.h"#include "rapidjson/writer.h"#include "rapidjson/stringbuffer.h"#include <iostream>using namespace rapidjson;int main() { // 1. 把 JSON 解析至 DOM。 const char* json = "{\"project\":\"rapidjson\",\"stars\":10}"; Document d; d.Parse(json); // 2. 利用 DOM 作出修改。 Value& s = d["stars"]; s.SetInt(s.GetInt() + 1); // 3. 把 DOM 转换(stringify)成 JSON。 StringBuffer buffer; Writer<StringBuffer> writer(buffer); d.Accept(writer); // Output {"project":"rapidjson","stars":11} std::cout << buffer.GetString() << std::endl; return 0;}
注意此例子并没有处理潜在错误。
6.编译例程:
$ g++ -o simpledom simpledom.cpp
7.运行:
$ ./simpledom
图解过程:
输出结果:
{"project":"rapidjson","stars":11}
系列教程持续发布中,欢迎订阅、关注、收藏、评论、点赞哦~~( ̄▽ ̄~)~
完的汪(∪。∪)。。。zzz
- NVIDIA Jetson TX1 系列开发教程之十二:libcurl、RapidJSON安装
- NVIDIA Jetson TX1 系列开发教程之五:CAFFE安装与NVIDIA多媒体例程测试
- NVIDIA Jetson TX1 系列开发教程之六:SSD安装与测试
- NVIDIA Jetson TX1 系列开发教程之七:FFMPEG安装与测试
- NVIDIA Jetson TX1 系列开发教程之八:Qt安装与配置
- NVIDIA Jetson TX1 系列开发教程之十四:YOLO安装与优化加速
- NVIDIA Jetson TX1 系列开发教程之一:开箱测试
- NVIDIA Jetson TX1 系列开发教程之二:刷机与开发前准备
- NVIDIA Jetson TX1 系列开发教程之三:Nsight Eclipse Edition基础
- NVIDIA Jetson TX1 系列开发教程之四:Nsight Eclipse Edition进阶
- NVIDIA Jetson TX1 系列开发教程之九:USB摄像头MJPEG格式图像采集
- NVIDIA Jetson TX1 系列开发教程之十:V4L2+OpenCV2.4.13实现预览、拍照功能
- NVIDIA Jetson TX1 系列开发教程之十一:TCP/IP文件传输
- NVIDIA Jetson TX1 系列开发教程之十三:使用OpenCV在图像上添加汉字
- NVIDIA嵌入式开发板Jetson TX1教程
- 【并行计算-CUDA开发】 NVIDIA Jetson TX1
- Jetson TX1 安装Caffe教程
- Jetson TX1 NVIDIA CUDA
- 那些年——不能说的秘密
- python 39 numpy常见函数小结
- 通用类型的两路归并算法实现(三)——运用Comparator实现更加通用的两路归并算法
- (软件工程)习题2.4
- Java设计模式——适配器模式(Adapter Pattern)
- NVIDIA Jetson TX1 系列开发教程之十二:libcurl、RapidJSON安装
- SpringMvc+POI 处理Excel的导入操作需要的所有环境
- mitmproxy爬APP数据
- ThinkPHP5微信支付扩展库(这恐怕是世界上最简单的微信支付类库了~)
- maven学习总结
- 爬虫开发过程常见的问题
- 3d数学基础:常用向量相关运算
- Junit和spring整合,使用Spring托管对象进行依赖注入,方便测试
- JAVA Spring web mvc 学习 之 7:拦截器(登录状态验证)