By admin | 11月18日
Advertisement

历经半个月终于把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的更多相关文章

  1. libcurl 支持openssl 但不能访问https

    重新编译了libcurl 去访问https 地址还是不能访问 从网上找到了解决方案: curl有两种方式使用https : 1. 设定为不验证证书和HOST code = curl_easy_seto ...

  2. 空间不支持openssl解决办法

    windows server2003 系统 IIS6.0 ,支付宝担保交易功能不能用,提示您的空间不支持openssl 解决办法如下:1.在C:\WINDOWS 下打开php.ini 将 extens ...

  3. net-snmp源码VS2013编译添加加密支持(OpenSSL)

    net-snmp源码VS2013编译添加加密支持(OpenSSL) snmp v3 协议使用了基于用户的安全模型,具有认证和加密两个模块. 认证使用的算法是一般的消息摘要算法,例如MD5/SHA等.这 ...

  4. net-snmp源码VS2013编译添加加密支持(OpenSSL)(在VS里配置编译OpenSSL)

    net-snmp源码VS2013编译添加加密支持(OpenSSL) snmp v3 协议使用了基于用户的安全模型,具有认证和加密两个模块. 认证使用的算法是一般的消息摘要算法,例如MD5/SHA等.这 ...

  5. IDHTTP-HTTPS通讯方法(Indy10.2.3之前仅支持OpenSSL的0.9.8以前的版本)

    加载https的站点页面内容的时候记得在窗体上加上“IdSSLIOHandlerSocketOpenSSL1” 以及idhttp里面IOHandler为“IdSSLIOHandlerSocketOpe ...

  6. openssl交叉编译

    目录 openssl交叉编译 title: openssl交叉编译 date: 2019/12/18 21:09:33 toc: true --- openssl交叉编译 tar xvf openss ...

  7. python3安装,支持openssl,支持采集https

    python3安装,支持openssl,支持采集https 坑好多,特别是安装的时候,各种不匹配,服务器默认配置是python2,升级3后,采集的时候用到openssl,花了两天也没搞定各种错误,也许 ...

  8. 在Linux下使用MinGW静态交叉编译带有zlib的libcurl(包括交叉编译openssl,即--cross-compile-prefix=i686-w64-mingw32- mingw)

    在Linux下使用MinGW静态交叉编译带有zlib的libcurl libcurl是一个跨平台的.易用的.强大的网络库.在大部分Linux发行版中都有编译好的二进制包可供使用,Mac系统更是将其作为 ...

  9. openssl交叉编译记录

    本次任务是要完毕嵌入式Linux下对openssl程序的支持.     我的开发环境:ARM9开发板 和 嵌入式Linux操作系统.装有Linux系统(我的是ubuntu9.04)的PC机一台.串口和 ...

随机推荐

  1. hdu3360National Treasures (最大匹配,拆点法)

    National Treasures Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...

  2. [CSS] Target Positional Elements Using *-Of-Type CSS pseudo-classes

    Learn how to target elements based on their position inside of a parent element in relation to its s ...

  3. ios开发Base64编码以及加密相关学习

    一:.Base64补充 ```objc 1.Base64简单说明 描述:Base64可以成为密码学的基石,非常重要. 特点:可以将任意的二进制数据进行Base64编码 结果:所有的数据都能被编码为并只 ...

  4. [转载]Ocelot简易教程(二)之快速开始2

    为什么这篇的标题叫“Ocelot简易教程(二)之快速开始2”呢,因为很多朋友跟我说上一篇“ Ocelot简易教程(二)之快速开始1”内容太少了,只是简单介绍Ocelot的一些简单配置,让Ocelot能 ...

  5. toLocaleDateString()

    在处理时间问题的时候,遇到了一个bug,关于toLocaleDateString()在不同浏览器下的解析结果. 代码如下 浏览器解析结果如下 可以看到谷歌,火狐等浏览器的输出结果是这种格式的 *201 ...

  6. [React] Modify file structure

    In React app, you might create lots of components. We can use index.js to do both 'import' & 'ex ...

  7. [React] Understand React.Children Utilities

    The data contained in this.props.children is not always what you might expect. React provides React. ...

  8. 【codeforces 546E】Soldier and Traveling

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  9. 【t067】补充装备

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] Mini进入洞口前自然要先来到镇里的装备店买些装备.买每件装备都需要付出一定的体力点,同时也会获得一定 ...

  10. Tomcat下ajax请求路径总结

    ajax的url有两种,一种是绝对路径,另一种是相对路径.   一.绝对路径:包括协议名称.主机地址.端口.web项目名称等的完整请求路径. 例如: $.ajax({     url:"ht ...