NVIDIA Jetson TX1 系列开发教程之十二:libcurl、RapidJSON安装

2023-05-16

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NVIDIA Jetson TX1 系列开发教程之十二:libcurl、RapidJSON安装 的相关文章

随机推荐

  • Fast planner 基本原理学习(一)

    一 主题 xff1a Fast planner 基本原理学习 二 目标 xff1a 理解Fast planner轨迹规划处理流程理解hybrid A 的改进点B样条曲线定义 性质 以及所带来的便利 三 正文 xff1a 1 Fast pla
  • 阿里研发一面经历

    人生第一次找工作笔试 面试 xff0c 都碰上了阿里 9月暑假来了 xff0c 才开始准备找工作 xff0c 今年的宣讲来的早 所以现在有点措手不及 xff0c 只能边准备边找 废话不多了 xff0c 进入正题 笔试题 xff0c 下期再论
  • 腾讯2014校园招聘软件后台开发类笔试题

    转http www itmian4 com forum php mod 61 viewthread amp tid 61 3572
  • 2014暴风影音校招技术笔试题(长春站)

    转http www itmian4 com forum php mod 61 viewthread amp tid 61 3622 1 升序排列下列数值 xff1a 2 写出下列函数的返回值 int func int x 61 300 in
  • 计算100以内的素数的个数

    以下代码是用来计算100以内的素数的个数 xff0c 请把相应的空填上 struct prime number node int prime number prime number node next int calc prime numb
  • C语言除法运算符“/”和求余运算符“%”

    看似两个很简单的运算符 xff0c 却也真要掌握用好它也不容易 xff0c 本文作为关于此类运算符的各方面的问题的汇总 xff0c 希望对你我都有一些帮助 除法运算符 二元运算符 xff0c 具有左结合性 参与运算的量均为整型时 xff0c
  • 冒泡排序

    include lt stdio h gt define LENGTH 8 void main int tmp number LENGTH 61 95 45 15 78 84 51 24 12 for i 61 0 i lt LENGTH
  • 金山词霸C++笔试(北邮11月23号)

    金山词霸笔试题 xff08 北邮11月23号 xff09 xff08 一 xff09 以下输出什么 xff1f char ptr 61 34 hello world 34 cout lt lt ptr h ptr指向字符串的首地址 xff0
  • 关于计算机研究和写作的链接收集

    研究相关的资源 What is Research in Computer Science 计算科学的研究是什么 xff1f 翻译 Basic Research Skills in Computer Science 计算科学的基本研究方法 R
  • 实战笔记之C++里面双冒号和冒号及点号引用符

    标题党了额 xff0c mark一下 xff0c 有时间再整理 以下节选自多人博客 推荐博文一篇http blog csdn net gyymen article details 4962873 箭头 xff08 gt xff09 xff1
  • 在Linux中如何修改root帐户的登录用户名

    vi etc passwd 按i键进入编辑状态 修改第1行第1个root为新的用户名 按esc键退出编辑状态 xff0c 并输入 x保存并退出 vi etc shadow 按i键进入编辑状态 修改第1行第1个root为新的用户名 按esc键
  • Linux elasticsearch 安装超详细教程

    1 下载elasticsearch 7 11 2 linux x86 64 tar gz 之所以下载7 11 2版本是因为我使用了中文分词器 xff0c 对应中文分词器的版本号 2 可以官方下载 xff0c 会比较慢 xff0c 这里提供我
  • 程序员做一辈子?

    首先 xff0c 程序员真有必要干一辈子吗 xff1f 如果你是个搬砖的 xff0c 你会考虑一辈子搬砖吗 xff1f 你肯定会想着过几年挣钱了 xff0c 买个车跑运输 xff0c 或者自己做工头 对程序员来说 xff0c 真心没有必要干
  • ubuntu系统怎么使用ifconfig和开启远程连接

    在ubuntu系统刚安装好之后ifconfig命令和开启远程连接都是不起作用的 xff0c 如果需要使ifconfig起作用需要安装一个小工具 xff0c 如果想开启远程连接的话也需要安装open ssh工具 开启ifconfig xff1
  • LDMIA、LDMIB、LDMDB、LDMDA、STMIA、LDMFD、LDMFA、LDMED、LDMEA等指令详解

    关于多寄存器加载存储指令 1 LDMIA指令 LDMIB指令 LDMDB指令 LDMDA指令 xff08 1 xff09 LDMIA指令 xff0c IA表示每次传送后地址加4 xff08 2 xff09 LDMIB指令 xff0c 每次传
  • FreeRTOS-互斥信号量

    原文地址 xff1a http blog csdn net xukai871105 article details 43456985 0 前言 在嵌入式操作系统中互斥型信号量是任务间资源保护的重要手段 下面结合一个具体例子说明FreeRTO
  • 执行体线程--ETHREAD

    typedef struct ETHREAD KTHREAD Tcb 内嵌了KTHREAD对象作为第一个数据成员 LARGE INTEGER CreateTime 包含了线程创建时间 xff0c 他是在线程创建时被赋值的 union LAR
  • 显卡驱动的作用(本质作用)

    确切资料表明显卡不需要驱动也可以进行显示 xff0c 只需要将显示的内容存到对应的显存地址就可以 xff08 通过cpu直接或者间接的硬连线实现 xff09 也就是说单纯的显示像素的话不需要使用显卡驱动 xff0c 但是单纯的显示像素甚至某
  • 智能指针之make_unique与make_shared

    make unique的实现 std make shared是C 43 43 11的一部分 xff0c 但是std make unique很可惜不是 它是在C 43 43 14里加入标准库的 xff0c 但我们可以自己实现make uniq
  • NVIDIA Jetson TX1 系列开发教程之十二:libcurl、RapidJSON安装

    NVIDIA Jetson TX1 系列开发教程之十二 xff1a libcurl RapidJSON安装 转载请注明作者和出处 xff1a http blog csdn net u011475210嵌入式平台 xff1a NVIDIA J