
交叉编译树莓派的curl库支持ssl
发布日期:2021-05-07 07:21:44
浏览次数:21
分类:精选文章
本文共 2945 字,大约阅读时间需要 9 分钟。
交叉编译 curl 和 OpenSSL 的配置与使用
在嵌入式系统或物联网设备中,常常需要使用 curl 和 OpenSSL 来实现 HTTPS 请求。本文将介绍如何在 Ubuntu 上配置交叉编译工具,编译 curl 和 OpenSSL,以便在树莓派等 ARM 平台上使用。
1. 开发环境配置
1.1 安装交叉编译工具
交叉编译需要使用目标平台的编译器。对于 ARM 平台,可以使用以下命令安装交叉编译工具:
sudo apt-get install -y gcc-arm-linux-gnueabi
安装完成后,确认编译器版本:
arm-linux-gnueabihf-gcc --version
预期输出应为:
arm-linux-gnueabihf-gcc (ARM GCC 8.3.0) 8.3.0
1.2 安装 OpenSSL
下载并编译 OpenSSL 源码。建议使用最新版本:
wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1a.tar.gztar xzvf openssl-1.1.1a.tar.gzcd openssl-1.1.1a
在编译时,指定目标平台:
./config -mno-ieee -fPIC -DARM -DARM64make -j4sudo make install
安装完成后,确认 OpenSSL 的安装位置:
whereis openssl
预期输出应为:
openssl at /usr/local/bin/openssl
1.3 安装 libcurl
下载并编译 libcurl 源码(注意:这里使用的是独立的 libcurl,而非 curl 工具本身):
wget --no-check-certificate https://github.com/curl/curl/releases/download/curl-7.71.1-1.tar.gztar xzvf curl-7.71.1-1.tar.gzcd curl-7.71.1-1
编译时,指定目标平台并使用预编译的 OpenSSL:
./configure --prefix=/usr/local --host=arm-linux-gnueabihf \ --with-ssl --with-openssl-libs=/usr/local/lib/ \ --with-ssl-prefix=/usr/local/ssl/make -j4sudo make install
安装完成后,确认 curl 是否支持 SSL:
curl --version
预期输出应包含 --SSL
选项:
curl 7.71.1
2. 验证 OpenSSL 和 curl
2.1 检查 OpenSSL 版本
在交叉编译完成后,运行以下命令:
/usr/local/bin/openssl version
预期输出为:
OpenSSL 1.1.1a 22 May 2019
2.2 检查 curl 是否支持 SSL
运行以下命令:
curl --version | grep SSL
预期输出为:
--SSL
3. 使用 curl 进行 HTTPS 请求
编写一个简单的 curl脚本:
#include#include #include #define true 1#define false 2typedef unsigned int bool;size_t readData(void *ptr, size_t size, size_t nmemb, void *stream) { char buf[1024] = {0}; strncpy(buf, ptr, 1024); printf("============= get Data ==========================\n"); printf("%s\n", buf); return size; // 返回实际读取的字节数}bool postUrl() { CURL *curl; CURLcode res = CURLE_OK; char *postString = (char *)malloc(strlen(key) + strlen(secret) + 2048); sprintf(postString, "&img1=%s&img2=%s&key=%s&secret=%s&typeId=%d&format=%s", key, secret, 21, format); curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postString); curl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/faceliu.do"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, readData); res = curl_easy_perform(curl); printf("ok!%d\n", res); curl_easy_cleanup(curl); } return true;}int main(void) { postUrl(); return 0;}
运行脚本:
gcc -mcpu/armv7 -mthumb -O2 -o curl_example curl_example.c
4. 常见问题与解决方案
4.1 SSL 支持缺失
如果生成的 curl 不支持 SSL,请检查以下内容:
- OpenSSL 安装路径:确保编译时指定了正确的 OpenSSL 库路径。
- curl 配置:在编译 curl 时,使用
--with-ssl
选项。 - 环境变量:安装完成后,确保
LD_LIBRARY_PATH
包含 OpenSSL 和 curl 的库路径。
4.2 动态库缺失
将生成的动态库 (libcurl.so
) copied 到树莓派上,并确保 LD_LIBRARY_PATH
包含该路径:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
通过以上步骤,您可以在树莓派等 ARM 平台上成功配置并使用 curl 和 OpenSSL 进行 HTTPS 请求。如果有其他问题,请根据错误信息逐步排查。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月03日 05时11分40秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Javascript之旅——第八站:说说instanceof踩了一个坑
2019-03-06
Javascript之旅——第九站:吐槽function
2019-03-06
Javascript之旅——第十一站:原型也不好理解?
2019-03-06
Sql Server之旅——第十站 看看DML操作对索引的影响
2019-03-06
十五天精通WCF——第二天 告别烦恼的config配置
2019-03-06
双十一来了,别让你的mongodb宕机了
2019-03-06
asp.net mvc 之旅 —— 第六站 ActionFilter的应用及源码分析
2019-03-06
Tomcat 热部署
2019-03-06
深入解析 HTTP 缓存控制
2019-03-06
深入浅出访问者模式
2019-03-06
深入探索Android热修复技术原理读书笔记 —— 热修复技术介绍
2019-03-06
百度前端技术学院task16源代码
2019-03-06
解析js中( ( ) { } ( ) )的含义
2019-03-06
js设计模式总结5
2019-03-06
Python大神编程常用4大工具,你用过几个?
2019-03-06
一文带你了解图神经网络
2019-03-06
9个常用ES6特性归纳(一般用这些就够了)
2019-03-06
3D渲染集群,你了解多少?
2019-03-06
除了方文山,用TA你也能帮周杰伦写歌词了
2019-03-06
关于GO语言,这篇文章讲的很明白
2019-03-06