概述
curl 是一个利用 URL 语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称 cURL 为下载工具。cURL 还包含了用于程序开发的 libcurl。
cURL 支持的通信协议有 FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP 和 RTSP。
- cURL 官方网址是:https://curl.se/
- cURL 使用 github 托管源码:https://github.com/curl/curl
下载
curl 项目主要提供源代码包。最新的稳定版本可以从官方网站的 Download 页面进行下载,网址:https://curl.se/download.html
本示例下载的源码包为 curl-7.68.0.tar.bz2
非常重要:
建议远离 7.82 版本,该版本在访问 HTTPS 时会报 ‘curl: (27) Out of memory’ 故障,无法正常使用,原因未知。
编译
在准备开始交叉编译 curl 之前,需要先交叉编译 OpenSSL,可以参考:交叉编译 OpenSSL。接着我们正式开始交叉编译 curl:
-
解压缩源码包
tar -xvf curl-7.68.0.tar.bz2
-
cd
进入源码包目录curl-7.68.0
,创建编译脚本cross-compile.sh
:#!/bin/bash OUTPUT=$(pwd)/output if [ -d $OUTPUT ]; then rm -r $OUTPUT fi mkdir $OUTPUT export PATH=$PATH:/opt/toolchains/aarch64--glibc--stable-2020.08-1/bin ./configure --prefix=$OUTPUT \ --host=aarch64-linux \ --with-ssl=/projects/openssl/openssl-1.1.1n/output \ --with-ca-bundle=/etc/ssl/certs/ca-certificates.crt \ --with-ca-path=/etc/ssl/certs make && make install
- 脚本首先检查是否在当前目录存在
output
目录,如果不存在则创建该目录用于编译结果libcurl
库的存放; - 指定交叉编译器的路径并将其加入到环境变量
$PATH
保证能够正确调用编译器; --prefix
指定最终生成的路径,结果会生成在output
目录下;--host
指定交叉编译工具链命令的前缀,生成的Makefile
文件中会将使用到的编译工具补全成aarch64-linux-gcc
或者aarch64-linux-ar
等;--with-ssl
指定交叉编译库 OpenSSL 的头文件和库路径;--with-ca-bundle
指定 CA 证书的文件路径(可选);--with-ca-path
指定存在 CA 证书的存放目录(可选)。
- 脚本首先检查是否在当前目录存在
-
执行编译:
bash cross-compile.sh
最后编译出来的 curl
位于 output
目录下。
Enjoy Your Life.
欢迎关注我的公众号:飞翔的小黄鸭
也许会发现不一样的风景
△
\triangle
△ 交叉编译 OpenSSL
▽
\bigtriangledown
▽ 交叉编译 JsonCpp 库