libcurl 支持 openssl 交叉编译 mips rt5350
历经半个月终于把libcurl库编译出来,参考网上很多博客,最终把自己要的库编译出来。
首先说明一下,我要这个库的目的。我在RT5350上跑openWRT需要向服务器提交数据,用http协议,且需要ssl加密。经过网上查找只有libcurl合适,于是我用mipsel-openwrt-linux-gcc开始交叉编译libcurl,
开始的时候一直在CSDN下载 libcurl的源代码包,版本不一样里面Makefile也会有差别,一直报错,具体错误我没记录下来可惜,后来我在github找一份比较新的版本curl-7.51.0.tar.gz 最好还是去官网下载 我刚开始可能就是源码包不对 。经过一星期的折腾终于把这个编译好了,但是我要支持https所以还需要加openssl,参考博客,
但是别人写的博客说的也不一定适合自己用,所以我才记录下这篇博客
一、用mipsel-openwrt-linux-gcc 编译libcurl
如果不需要支持ssl的话配置的时候要把 ssl 关了
1.解压安装包 tar -xvf curl-7.51.0.tar.gz
2.进入目录 cd curl-7.51.0
3.配置 ./configure --prefix=/opt/libcurl-lib CC=mipsel-openwrt-linux-gcc --host=mipsel-linux -with-ssl=/opt/openssl-lib/
--prefix后面跟的是你到时候库要放的地方,就像Linux装软件一样装在哪里,由于我不是要在虚拟机运行只要这个库,所以就选/opt/libcurl-lib这个目录,到时候下面一步就知道了
CC=这个是配置交叉编译链
--host=mipsel-linux这个网上说是目标机,也就是这个库到时候编译出来的程序要运行的那设备,我也不懂
-with-ssl=/opt/openssl-lib/ 这个就是打开ssl, 有的版本默认是打开 有的是默认关闭,自己去看吧哈哈, =/opt/openssl-lib/这个就是你的依赖库放在哪里,我就放这了,待会儿会讲为啥
4.编译 make -j4 -j4是为了编译的时候更快 好像是4核吧
5.安装(生成库) make install 经过这一步就会把生成的库等等放在配置的时候这个里面--prefix=/opt/libcurl-lib 应该是把源码包那边需要的东西拷贝到这里面
二、上面说了需要依赖库openssl的库,那我们一起来编译OpenSSL吧
源码包openssl-1.0.1u.tar.gz
先说一下为什么没有选择比较新的版本,因为我用了很多版本,Makefile都有差别为参考博客http://blog.csdn.net/clirus/article/details/50151427
我就选了跟他比较接近的版本,不过他说的“如果是mips交叉编译,修改完makefile后仍需要将此makefile文件中的-m64 后缀全部去掉。”这个我没这一步,找不到-m64
1.解压
2.进入目录
3.配置 ./config no-asm shared --prefix=/opt/openssl-lib --cross-compile-prefix=mipsel-openwrt-linux-
no-asm 这个我也不太懂 说什么不依赖汇编啥的吧,不懂不懂就跟着加上去
shared这个是因为需要生成动态库, 如果不加shared编译的时候 就不会有 -fPIC,自己去观察, 但是在编译libcurl的时候就报错说什么编译的时候没有-fPIC,我按网上的说的在Makefile修改 加上-fPIC也没有用 所以还是加上shared吧
--prefix=/opt/openssl-lib 这个前面提到了 就是生成的库要放到这里里面,编译libcurl的时候依赖库路径就要指定到这
--cross-compile-prefix=mipsel-openwrt-linux- 这个就是配置交叉编译链
这上面一、二 顺序是颠倒的其实是要编译OpenSSL,再编译libcurl
终于编译出来,哎。。。。。。。。。。
测试程序也上吧
#include <string> using namespace std; FILE *fp;
//这个函数是为了符合CURLOPT_WRITEFUNCTION而构造的
//完成数据保存功能
size_t WriteData(void *ptr, size_t size, size_t nmemb, void *stream)
{
int written = fwrite(ptr, size, nmemb, (FILE *)fp);
return written;
}
int postUrl(char *strUserPassword)
{
CURL *curl;
CURLcode res;
struct curl_httppost *post=NULL;
struct curl_httppost *last=NULL; string strCredstr = //
string strCurlOpt_url = // 自己要连接的服务器地址 if((fp=fopen("/opt/1.txt","w"))==NULL)
{
printf("fopen( /opt/1.txt) fail\n");
exit(1);
} curl = curl_easy_init();
if (curl)
{
curl_easy_setopt(curl, CURLOPT_URL,strCurlOpt_url.c_str()); // 指定url
curl_formadd(&post, &last, CURLFORM_COPYNAME, "grant_type",CURLFORM_COPYCONTENTS, strCredstr.c_str(), CURLFORM_END);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_USERPWD, strUserPassword); //CURLOPT_WRITEFUNCTION 将后继的动作交给write_data函数处理
//回调函数原型为:size_t function( void *ptr, size_t size, size_t nmemb, void *stream);
//函数将在libcurl接收到数据后被调用,因此函数多做数据保存的功能,如处理下载文件。
//CURLOPT_WRITEDATA 用于表明CURLOPT_WRITEFUNCTION函数中的stream指针的来源。
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteData); res = curl_easy_perform(curl);
printf("%d %s\n",res, curl_easy_strerror(res));
curl_easy_cleanup(curl);
}
fclose(fp);
return 1;
}
int main(void)
{
string strUsername = "401f8c403a9447119d722b592b2c9957";
string strPassword = "415d320b18974921b66569d6a89ef369"; char acUserName[1024] = " ";
snprintf(acUserName, sizeof(acUserName), "%s:%s",strUsername.c_str(), strPassword.c_str()); curl_global_init(CURL_GLOBAL_SSL);
postUrl(acUserName);
}
噢对了 还有一点就是要把库都加进去,在eclipse加库还有顺序,自己去试吧 我也没法讲清,我也不知道为啥。不懂就留言吧
http://www.yaoguangkeji.com/a_7kGzGWn3.html
libcurl 支持 openssl 交叉编译 mips rt5350的更多相关文章
- libcurl 支持openssl 但不能访问https
重新编译了libcurl 去访问https 地址还是不能访问 从网上找到了解决方案: curl有两种方式使用https : 1. 设定为不验证证书和HOST code = curl_easy_seto ...
- 空间不支持openssl解决办法
windows server2003 系统 IIS6.0 ,支付宝担保交易功能不能用,提示您的空间不支持openssl 解决办法如下:1.在C:\WINDOWS 下打开php.ini 将 extens ...
- net-snmp源码VS2013编译添加加密支持(OpenSSL)
net-snmp源码VS2013编译添加加密支持(OpenSSL) snmp v3 协议使用了基于用户的安全模型,具有认证和加密两个模块. 认证使用的算法是一般的消息摘要算法,例如MD5/SHA等.这 ...
- net-snmp源码VS2013编译添加加密支持(OpenSSL)(在VS里配置编译OpenSSL)
net-snmp源码VS2013编译添加加密支持(OpenSSL) snmp v3 协议使用了基于用户的安全模型,具有认证和加密两个模块. 认证使用的算法是一般的消息摘要算法,例如MD5/SHA等.这 ...
- IDHTTP-HTTPS通讯方法(Indy10.2.3之前仅支持OpenSSL的0.9.8以前的版本)
加载https的站点页面内容的时候记得在窗体上加上“IdSSLIOHandlerSocketOpenSSL1” 以及idhttp里面IOHandler为“IdSSLIOHandlerSocketOpe ...
- openssl交叉编译
目录 openssl交叉编译 title: openssl交叉编译 date: 2019/12/18 21:09:33 toc: true --- openssl交叉编译 tar xvf openss ...
- python3安装,支持openssl,支持采集https
python3安装,支持openssl,支持采集https 坑好多,特别是安装的时候,各种不匹配,服务器默认配置是python2,升级3后,采集的时候用到openssl,花了两天也没搞定各种错误,也许 ...
- 在Linux下使用MinGW静态交叉编译带有zlib的libcurl(包括交叉编译openssl,即--cross-compile-prefix=i686-w64-mingw32- mingw)
在Linux下使用MinGW静态交叉编译带有zlib的libcurl libcurl是一个跨平台的.易用的.强大的网络库.在大部分Linux发行版中都有编译好的二进制包可供使用,Mac系统更是将其作为 ...
- openssl交叉编译记录
本次任务是要完毕嵌入式Linux下对openssl程序的支持. 我的开发环境:ARM9开发板 和 嵌入式Linux操作系统.装有Linux系统(我的是ubuntu9.04)的PC机一台.串口和 ...
随机推荐
- css3-11 如何让html中的不规则单词折行
css3-11 如何让html中的不规则单词折行 一.总结 一句话总结:用word-wrap属性:word-wrap:break-word; 1.word-break和word-wrap的区别? 推荐 ...
- spring-如何在项目启动的情况下获取Bean实例
十年阿里,就只剩下这套Java开发体系了 >>> 大家都知道,项目启动的时候,spring读取xml文件,将配置的bean 或者 注解下的controller service d ...
- ios开发网络学习五:输出流以及文件上传
一:输出流 #import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelega ...
- inflate, findViewById与setContentView的区别与联系 分类: H1_ANDROID 2014-04-18 22:54 1119人阅读 评论(0) 收藏
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV ...
- asm 的hello world 2011.04.28
这几天一直在弄一个嵌入式的程序,搭环境,熟悉库函数,熟悉汇编,乱成一锅粥,到现在还是没有什么系统性的收获. 或许下周弄出来吧,(一定得弄出来,不然老大该跟我急了……). 今天,熟悉汇编,好歹用汇编写出 ...
- .NET Framework基础知识(四)(转载)
.反射:是编程的读取与类型相关联的元数据的行为.通过读取元数据,可以了解它是什么类型以及类型的成员. 比如类中的属性,方法,事件等.所属命名空间System.Reflection. 例:using S ...
- MySQL运行环境部署规范
一:系统安装规范 1.关闭CPU节能,设定最大性能模式. 2.关闭NUMA(主要是为了避免swap).C-states.C1E. 3.阵列卡策略使用FORCE WB,关闭预读. 4.机械盘时,所有盘组 ...
- DI:依赖注入详解
DI(依赖注入) 依赖注入的理解: 一般写程序的时候service层都需要用到dao层,所以一般都是在service层里面new dao ,而现在利用依赖注入的方式,直接把dao给了service层 ...
- JAVA 安装JDK注意事项
在JAVA jdk安装的时候,文件夹名称最好不要有中文,有逗号,有下划线,空格等问题.这样easy出错,比方以下几个安装路径easy出错 java文件夹/jdk1.6_x86/ 这样的就是 ...
- 前端切图:调用百度地图API
原型图 图片发自简书App <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...