交叉编译树莓派的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 请求。如果有其他问题,请根据错误信息逐步排查。

上一篇:Hexo博客加入聊天系统DaoVoice
下一篇:Linux的一些简单命令

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年04月03日 05时11分40秒