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 ...
随机推荐
- HBase-通过外部表将Hive数据写入到HBase
a) 准备测试数据 这里准备的csv文件data_test.csv,内容没用''包裹,逗号作为列分隔符 171301,燕青,男,27,发展部 171207,武松,男,39,开发部 171307,李逵, ...
- JS leetcode 反转字符串 题解分析
壹 ❀ 引 今天做的一道题非常简单,原题来自leetcode第344题反转字符串,题目如下: 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外 ...
- Mobx与Redux的异同
Mobx与Redux的异同 Mobx与Redux都是用来管理JavaScript应用的状态的解决方案,用以提供在某个地方保存状态.修改状态和更新状态,使我们的应用在状态与组件上解耦,我们可以从一个地方 ...
- 我在winform项目里使用“Windows I/O完成端口”的经验分享
少年!看你骨骼惊奇,是万中无一的练武奇才,我这儿有本武林秘籍,见与你有缘就送你了! 如来神掌 Windows I/O完成端口是一个我至今都说不好的话题,请宽容的接受我这不是科班出身的自学成才的野生程序 ...
- win32 - 以编程方式访问远程计算机上的文件
第一步,在一台计算机上将某个驱动器或者某个文件夹设为sharing模式.这是我们需要访问的共享文件夹.(不需要设置everyone权限) 第二步,我们需要为两台在同一domain下的计算机上建立连接. ...
- ADVMP 三代壳(vmp加固)原理分析(加壳流程)
开源项目地址 https://github.com/chago/ADVMP vmp 加固可以说时各大加固厂商的拳头产品了,这个开源项目虽然不是十分完善,让我们可以一览vmp加固的原理,是十分好的学习资 ...
- 【Android 逆向】【ARM汇编】 全局资源重定位
资源重定位解释: 字符串反汇编代码解释: .rodata:00001E20 __exidx_end DCB "a + b = %d" ; DATA_XREF: main+28^o ...
- 配置kube-apiserver基于token的认证机制
Kubernetes除了提供了基于CA证书的认证方式,也提供了基于HTTP Token的简单认证方式.各客户端组件与API Server之间的通信方式仍然采用HTTPS,但不采用CA数字证书.这种认证 ...
- java怎么打印一个对象的内存地址
在Java一般使用HashCode来代表对象的地址,但是两个相同的对象就不行了,两个相同的对象的hashcode是相同的. 如果要对比两个相同的对象的地址可以使用,System.identityHas ...
- InSAR处理软件——Gamma 安装教程
Gamma是由瑞士 GAMMA Remote Sensing 公司开发SAR数据处理软件,支持SAR数据全流程处理,是最InSAR最常用的软件.下面介绍该软件的安装流程,安装环境为Ubuntu16.0 ...