libcurl 支持 openssl 交叉编译 mips rt5350

By admin | 11月18日

0 Comment

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

时间: 2024-10-15 12:57:29

libcurl 支持 openssl 交叉编译 mips rt5350的相关文章

openssl交叉编译记录

本次任务是要完成嵌入式Linux下对openssl程序的支持. 我的开发环境:ARM9开发板 和 嵌入式Linux操作系统.装有Linux系统(我的是ubuntu9.04)的PC机一台.串口和串口连接线.串口调试软件:minicom.交叉编译工具:arm-unknown-linux-gnu-gcc 下载最新版本的openssl-1.0.0: http://www.openssl.org/source/ 解压:$tar -xzvf  openssl-1.0.0.tart.gz $cd openss

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

加载https的站点页面内容的时候记得在窗体上加上“IdSSLIOHandlerSocketOpenSSL1” 以及idhttp里面IOHandler为“IdSSLIOHandlerSocketOpenSSL1” 不然老报“IOHandler value is not valid.”错误. dnspod API V2.0 就是用的https 用delphi开发客户 只需要用idhttp就可以post 在界面上放一个TIdHTTP控件,命名为IdHTTP1,再放一个TIdSSLIOHandlerS

MySQL检查运行的mysqld服务器是否支持OpenSSL

1.问题背景 在MySQL服务器和客户端之间使用SSL连接,需要判断系统是否支持OpenSSL,如何查看是否支持OpenSSL 2.解决方案 利用MySQL自带的命令执行查询 SHOW VARIABLES LIKE 'have_openssl'; 3.执行结果 如果Value为"Yes"才支持OpenSSL,但是查询结果为"DISABLED",表示不支持OpenSSL 版权声明:本文为博主原创文章,未经博主允许不得转载.

openssl交叉编译

目录 openssl交叉编译 title: openssl交叉编译 date: 2019/12/18 21:09:33 toc: true --- openssl交叉编译 tar xvf openssl-1.0.2t.tar.gz openssl-1.0.2t export CC=arm-linux-gcc mkdir arm ./config no-asm shared --prefix=$(pwd)/arm # 去除-m64 vi Makefile make #这里有错误 但是可以不管好像

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

在Linux下使用MinGW静态交叉编译带有zlib的libcurl libcurl是一个跨平台的.易用的.强大的网络库.在大部分Linux发行版中都有编译好的二进制包可供使用,Mac系统更是将其作为了一个核心部件.但是在Windows平台上却需要手工编译,更不必说一些有特殊洁癖的人(比如说我)还特别讨厌多出来几个DLL,非要静态链接不可.本文作为我两个晚上折腾经历的一个小小总结,讲解如何在Linux下使用MinGW编译给Windows使用的libcurl静态库. STEP1 安装MinGW编译

VC++ 编译libcurl 支持SSL,GZIP(有脚本)

由于网上下载的 libcurl 不支持 gzip,只好自己动手编译,期间走了很多弯路,下面是最终成功的记录. 我所使用的环境 Visual Studio 2010 . Windows 7 64 bit 1 下载文件 1.1 libcurl 下载页面 http://curl.haxx.se/download.html 下载地址 http://curl.haxx.se/download/curl-7.26.0.zip 1.2 zlib 下载页面 http://sourceforge.net/proj

VC++ 编译libcurl 支持SSL,GZIP

由于网上下载的 libcurl 不支持 gzip,只好自己动手编译,期间走了很多弯路,下面是最终成功的记录. 我所使用的环境 Visual Studio 2010 . Windows 7 64 bit 1 下载文件 1.1 libcurl 下载页面http://curl.haxx.se/download.html 下载地址 http://curl.haxx.se/download/curl-7.26.0.zip 1.2 zlib 下载页面http://sourceforge.net/projec

Windows 编译libcurl(openssl+zlib)(使用VC编译)

libcurl主要功能就是用不同的协议连接和沟通不同的服务器,如果使用HTTPS,需要OpenSSL libcurl https://curl.haxx.se/download.html 下载Source Archives即可 ActiveState https://www.activestate.com/activeperl/downloads 下载perl解析器,编译openssl需要用到. openssl https://www.openssl.org/source/ 下载openssl-

交叉编译mips(ubuntu)

使用buildroot进行交叉编译,网上的教程很多,按照教程一步一步就OK了.主要记录几个遇到的问题. mips & gdb http://md.purpleroc.com/cross%20compile/embedded%20tools/technic/2015/09/07/Cross_compile.html 设置环境变量 http://jingyan.baidu.com/article/db55b609a3f6274ba30a2fb8.html 在低版本的编译过程中,有可能出现这样的错误: