Libcurl & Log4cplus 移植和使用 以及 Jsoncpp 简单使用
PS:要转载请注明出处,本人版权所有。
PS: 这个只是基于《我自己》的理解,
如果和你的原则及想法相冲突,请谅解,勿喷。
前置说明
本文作为本人csdn blog的主站的备份。(BlogID=045)
本文发布于 2017-11-20 16:55:24,现用MarkDown+图床做备份更新。blog原图已丢失,使用csdn所存的图进行更新。(BlogID=045)
环境说明
无
前言
无
Libcurl篇(curl-7.55.1.tar.gz)
移植Libcurl
我首先看了一下其目录结构,里面存在两套编译结构,一个是依赖于CMake,一个是依赖于Autoconf。
这里使用的是Autoconf。
./configure --prefix=你的安装绝对路径 --host=arm-linux-gnueabi --target=arm-linux-gnueabi CXX=arm-linux-gnueabi-g++ CC=arm-linux-gnueabi-gcc
make -j16
make install
说明:--prefix 指定安装路径, --host以及--target指定目标架构, CC和CXX变量指定了工具链
使用Libcurl
curl_global_init
curl_easy_init
curl_easy_setopt
//CURLOPT_HTTPHEADER 设置头信息
//CURLOPT_URL 设置url信息
//CURLOPT_POST 设置本次http请求方式是否为post
//CURLOPT_POSTFIELDS 设置post 数据域
//CURLOPT_WRITEFUNCTION 设置http返回信息的回调函数
//CURLOPT_WRITEDATA 设置回调函数中,userdata的数据内存
curl_easy_perform
curl_easy_cleanup
curl_global_cleanup
int yUpgrade::ReportUpgradeStatus(const std::string & str){
// InitLibCurl(ycurl);
if ( CURLE_OK != (res = curl_global_init(CURL_GLOBAL_ALL)) ){
std::cout<<"curl_global_init call failed "<<std::endl;
return -1;
}
if ( !( ycurl = curl_easy_init() ) ){
std::cout<<"curl_easy_init call failed "<<std::endl;
return -1;
}
struct curl_slist *headers = NULL;
headers=curl_slist_append(headers, "Content-Type:application/json");
headers=curl_slist_append(headers, "Accept:application/json");
headers = curl_slist_append(headers, "charset:utf-8");
curl_easy_setopt(ycurl, CURLOPT_HTTPHEADER, headers);
//headers = curl_slist_append(headers, "Accept: Agent-007");
//curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(ycurl, CURLOPT_URL, REPORTUPGRADESTATUS_URL);
//curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");//自定义请求方式
curl_easy_setopt(ycurl, CURLOPT_POST, 1);//设置为非0表示本次操作为POS
//curl_easy_setopt(ycurl, CURLOPT_POSTFIELDSIZE, str.size());//设置上传json串长度,这个设置可以忽略
curl_easy_setopt(ycurl, CURLOPT_POSTFIELDS, str.c_str());
curl_easy_setopt(ycurl, CURLOPT_WRITEFUNCTION, write_callback);//设置回调函数
curl_easy_setopt(ycurl, CURLOPT_WRITEDATA, RecCharBuf);//设置写数据
if ( CURLE_OK != (res = curl_easy_perform(ycurl)) ){
CleanUpLibCurl(ycurl);
curl_slist_free_all(headers);
std::cout<<"curl_easy_perform call failed,Res= "<<res<<std::endl;
return -1;
}
CleanUpLibCurl(ycurl);
curl_slist_free_all(headers);
return 0;
}
Log4cplus篇(log4cplus-1.2.1-rc2.7z)
移植Log4cplus
./configure --host=arm-linux-gnueabi --target=arm-linux-gnueabi CC=arm-hisiv400-linux-gcc CXX=arm-hisiv400-linux-g++
make -j8
make install
Log4cplus的使用(网上去找教程就可以了,一大堆,推荐使用加载配置文件的方式,不要在程序中配置)
- PropertyConfigurator 类来加载配置文件
- 然后正常使用就可以了
Jsoncpp篇(1.8.3)
Jsoncpp的简单使用(注意,Jsoncpp更新了,有些接口不推荐了,但是可以用,网上大部分的教程都是旧版的,这里我会给出新的和旧的的使用).这里只有读的。写的类似。
std::string G4FileUrl;
// Json::CharReader *tmp ;
// Json::CharReaderBuilder * ptmp = new Json::CharReaderBuilder();
// tmp = ptmp->newCharReader();
//tmp->parse(upgrade.RecStr,root1)
Json::Reader UpGradeInfo;
Json::Value root1;
UpGradeInfo.parse(upgrade.RecStr,root1)
G4FileUrl = root1["fileInfo"]["fileUrl"].asString();
/*例子json结构
{
"fileInfo":{
"id":{"timestamp":1508143624,"machineIdentifier":439847,"processIdentifier":524,
"counter":15004360},
"fileUrl":"http://xxxxxxxxx/group1/M00/00/35/wKgfdVnkcgiAVnsqAAHEhu0PItU720.jpg",
"fileName":"TX.jpg",
"fileType":4,
"cameraId":0,
"addedDate":"Oct 16, 2017 4:47:04 PM"}
}
}
*/
说明,如果使用旧版接口,gcc会报warning: ‘Reader’ is deprecated: Use CharReader and CharReaderBuilder instead [-Wdeprecated-declarations],msvc (// MSVC 2008 以上 )会报error。
后记
无
参考文献
- 无
打赏、订阅、收藏、丢香蕉、硬币,请关注公众号(攻城狮的搬砖之路)
PS: 请尊重原创,不喜勿喷。
PS: 要转载请注明出处,本人版权所有。
PS: 有问题请留言,看到后我会第一时间回复。
Libcurl & Log4cplus 移植和使用 以及 Jsoncpp 简单使用的更多相关文章
- JsonCpp简单使用
作者:ilife JsonCpp简单使用 1.相关概念总结 (1)解析json的方法 Json::Value json; //表示一个json格式的对象 Json::Reader reader ...
- Cocos2d-x移植到WindowsPhone8移植问题-libcurl库移植问题
在Cocos2d-x 3.x最新版本中提供了Windows Phone 8平台移植libcurl库所需要的头文件和库文件.但要在Windows Phone 8平台成功移植libcurl库还是很不容易, ...
- JsonCpp 简单使用
[转]自: http://www.cnblogs.com/ytjjyy/archive/2012/04/17/2453348.html JsonCpp 是一个C++用来处理JSON 数据的开发包.下面 ...
- JsonCpp的简单使用方法
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Langu ...
- linux c libcurl的简单使用(转)
curl是Linux下一个非常著名的下载库,通过这个库,可以很简单的实现文件的下载等操作.看一个简单的例子: #include <curl/curl.h> #include <std ...
- QM UML状态机建模实例之移植 cortex-m0
---恢复内容开始--- 在上一期“Blinky for cortex-m0”中我们介绍了如何在QM中建立一个工程和生成代码,如何使生成的代码在我们的工程师运行起来,为此这一期要介绍如何将QP-NAN ...
- Linux移植的一般过程
前一阵子在公司移植Linux2.6到一块ARM11的开发板上,下面粗略讲讲移植Linux的一般过程. 一开始的UBOOT的移植不多说了.UBOOT最后有两种方式进入Linux,一种是使用uImage, ...
- 六轴加速度传感器MPU6050官方DMP库到瑞萨RL78/G13的移植
2015年的电赛已经结束了.赛前接到器件清单的时候,看到带防护圈的多旋翼飞行器赫然在列,又给了一个瑞萨RL78/G13的MCU,于是自然联想到13年的电赛,觉得多半是拿RL78/G13做四旋翼的主控, ...
- Libcurl最初的实现tfp上传和下载功能
研究报告指出的目标是使用libcurl实现ftp文件上传和下载功能 一.Libcurlde简要 Libcurl的而且易于使用的利用url进行文件传输的库. , libcurl当前支持DICT, FIL ...
- Libcurl细说
libcurl教程 原文地址:http://curl.haxx.se/libcurl/c/libcurl-tutorial.html 译者:JGood(http://blog.csdn.net/J ...
随机推荐
- (python)代码学习||2024.2.3||题目是codewars上的【Validate Sudoku with size `NxN`】
题目的要求是写一个Sudoku类,类中要有一个实例函数判断传给对象的二维数组是否符合数独规则 题目链接:https://www.codewars.com/kata/540afbe2dc9f615d5e ...
- FolkMQ "单线程"消息中间件 v1.0.32 发布
简介 采用 "单线程" + "多路复用" + "内存运行" + "快照持久化" + "Broker 集群模式& ...
- SQLServer复制表及数据的两种方法
1.新表不存在(即复制数据的同时创建与旧表相同结构的新表): select [col1,col2,col3...] into new_table from old_table where 1= ...
- NVM Feature— Reservation(NVME 学习笔记五)
8.8 Reservations 预订 NVMe的reservation预订功能,用于让两个或多个主机能够协调配合的访问共享namespace.使用这些功能的协议和方式超出了本规格说明书的范围.对这些 ...
- Java设计模式-观察者模式Observer
介绍 观察者模式是行为设计模式之一.当您对对象的状态感兴趣并希望在任何更改时得到通知时,观察者设计模式非常有用.在观察者模式中,观察另一个对象状态的对象被称为观察者,而被观察的对象则被称为主体. 优点 ...
- 虚拟机ubuntu配置静态IP
手头搭建了几天虚拟机ubuntu用来做微服务环境的搭建,目前使用的是DHCP分配的网络,每次启动各台服务器的ip都是随机的 管理起来有点乱,所以就要把他们配置成静态的ip.具体操作步骤如下: 我直接用 ...
- 之前练手使用基于gin的go web项目
目录结构: `-- demo |-- cmd | |-- api.go | `-- root.go |-- common | `-- consts | `-- consts.go |-- config ...
- C++ 将filesystem::path转换为const BYTE*
std::string s = fs::temp_directory_path().append(filename).string(); LPCBYTE str = reinterpret_cast& ...
- EasyExcel使用及自定义设置单元格样式
EasyExcel使用及自定义设置单元格样式 https://www.cnblogs.com/Hizy/p/11825886.html easyexcel 自动设置列宽 https://www.man ...
- Golang条件编译介绍
相信熟悉 Golang 的小伙伴不少都知道 条件编译 这个事,最近项目中也可能会用到这个东西.所以特意重新学习下,记录下学习的过程.这样用的时候记不住了,还可以直接过来看自己的笔记. 文章很多内容来源 ...