交叉编译 CURL

概述

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 项目主要提供源代码包。最新的稳定版本可以从官方网站的 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
    
    1. 脚本首先检查是否在当前目录存在 output 目录,如果不存在则创建该目录用于编译结果 libcurl 库的存放;
    2. 指定交叉编译器的路径并将其加入到环境变量 $PATH 保证能够正确调用编译器;
    3. --prefix 指定最终生成的路径,结果会生成在 output 目录下;
    4. --host 指定交叉编译工具链命令的前缀,生成的 Makefile 文件中会将使用到的编译工具补全成 aarch64-linux-gcc 或者 aarch64-linux-ar 等;
    5. --with-ssl 指定交叉编译库 OpenSSL 的头文件和库路径;
    6. --with-ca-bundle 指定 CA 证书的文件路径(可选);
    7. --with-ca-path 指定存在 CA 证书的存放目录(可选)。
  • 执行编译:

    bash cross-compile.sh
    

最后编译出来的 curl 位于 output 目录下。

Enjoy Your Life.

欢迎关注我的公众号:飞翔的小黄鸭
也许会发现不一样的风景


△ \triangle 交叉编译 OpenSSL
▽ \bigtriangledown 交叉编译 JsonCpp 库

### 如何交叉编译 Curl 7.81 版本 为了成功完成对 `Curl` 的交叉编译,以下是详细的配置和操作说明: #### 准备工作 首先需要下载目标版本的源码。根据提供的链接[^1],可以选择从官方仓库下载 `Curl 7.81.0` 的压缩包并解压。 ```bash wget https://github.com/curl/curl/archive/refs/tags/curl-7_81_0.tar.gz tar -xzvf curl-7_81_0.tar.gz cd curl-curl-7_81_0 ``` #### 设置交叉编译工具链 在交叉编译过程中,需定义合适的工具链路径以及架构参数。假设使用的工具链为 ARM 架构下的 GNU 工具链,则可以通过设置环境变量来实现这一需求[^4]。 ```bash export CC=arm-linux-gnueabihf-gcc export CXX=arm-linux-gnueabihf-g++ export AR=arm-linux-gnueabihf-ar export RANLIB=arm-linux-gnueabihf-ranlib export STRIP=arm-linux-gnueabihf-strip ``` 如果工具链位于特定位置(如 `/opt/toolchains/arm-linux-gnueabihf/bin/`),则应提供完整的绝对路径以确保命令能够被正确解析。 #### 配置构建选项 进入解压后的源码目录后,执行 `./configure` 脚本来初始化构建环境。在此阶段,必须指定目标平台及相关依赖项的位置。例如,当涉及 SSL 支持时,可能还需要额外指明 OpenSSL 库所在路径[^3]。 ```bash ./configure --host=arm-linux-gnueabihf \ --prefix=/path/to/install/directory \ --with-ssl=/path/to/openssl \ --disable-shared \ --enable-static ``` 其中: - `--host`: 明确告知脚本所期望的目标体系结构; - `--prefix`: 设定最终产物安装的基础地址; - `--with-ssl`: 提供外部加密支持模块的具体定位信息; - `--disable-shared/--enable-static`: 控制是否生成动态共享对象还是静态库形式的结果文件。 对于某些高级功能启用情况,比如 HTTPS 请求中的证书验证部分,可通过调整相关 API 参数进一步定制行为模式[^5]: ```c curl_easy_setopt(easy_handle, CURLOPT_SSL_VERIFYPEER, 1L); curl_easy_setopt(easy_handle, CURLOPT_CAINFO, "/path/to/ca-bundle.crt"); ``` 以上片段展示了如何强制开启服务器身份认证机制的同时加载可信 CA 列表资源。 #### 执行实际编译过程 一旦所有前期准备工作就绪之后,就可以调用标准 Make 命令开始正式编译流程了: ```bash make clean && make -j$(nproc) ``` 最后一步则是将成果部署至预定区域或者打包分发给其他设备端使用: ```bash make install DESTDIR=/output/path/ ``` 通过上述步骤即可顺利完成基于指定硬件平台上的软件适配任务。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iBlackAngel

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值