交叉编译curl(OpenSSL)移植ARM详细步骤

news/2025/2/26 14:29:56

运行配置脚本
使用 Configure 脚本配置 OpenSSL,指定目标平台和安装路径:

curl downloads  各个版本

Old 1.1.1 Releases | OpenSSL Library   各个版本

从 OpenSSL 官网下载源码包

tar -xzf openssl-1.1.1b.tar.gz
cd openssl-1.1.1b/

运行配置脚本
使用 Configure 脚本配置 OpenSSL,指定目标平台和安装路径: 

./Configure linux-armv4 --prefix=/home/lxh/arm-libs/install --cross-compile-prefix=arm-linux-gnueabihf-

    • linux-armv4:指定目标平台为 ARM。

    • --prefix:指定安装路径(替换为你的目标路径)。

    • --cross-compile-prefix:指定交叉编译工具链前缀。

  1. 调整配置(可选)
    如果需要调整配置,可以编辑生成的 Makefile,例如:

    • 修改 CFLAGS 和 LDFLAGS 以优化编译选项。

    • 确保 -march=armv7-a 或 -mcpu=cortex-a9 等选项适合你的目标硬件。

    • 编译 OpenSSL

    • 编译源码
      运行以下命令开始编译:

      make -j$(nproc)
      • -j$(nproc):使用多核并行编译以加快速度。

    • 检查编译结果
      编译完成后,检查生成的库文件和可执行文件:

      file apps/openssl

      输出应显示为 ARM 架构的可执行文件。

将编译好的 OpenSSL 安装到指定路径:

make install

下载并解压 curl 源码

tar -xvjf curl-7.64.1.tar.bz2 
cd curl-7.64.1

使用 configure 脚本配置编译选项,指定交叉编译工具链和目标平台

./configure --host=arm-linux-gnueabihf --prefix=/home/lxh/arm-libs/install \
            --with-ssl=/home/lxh/arm-libs/install \
            --disable-ldap \
            --disable-ldaps \
            --without-libpsl \
            --without-libidn2 \
            --without-zstd \
            --without-brotli \
            --without-libpsl \
            CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++
  • --host=arm-linux-gnueabihf:指定目标平台为 ARM。

  • --prefix=/home/lxh/arm-libs/install:指定安装目录。

  • --with-ssl 和 --with-zlib:启用 SSL 和 zlib 支持。

  • CC 和 CXX:指定交叉编译器

编译和安装

make -j$(nproc)
make install

在 ARM 设备上运行 curl,验证是否正常工作。

testcurl.c

 #include <curl/curl.h>
int main(void)
{
    CURL *curl;
    CURLcode res;

    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();
    if (curl)
    {
        curl_easy_setopt(curl, CURLOPT_URL, "https://www.baidu.com");
        res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
        curl_easy_cleanup(curl);
    }
    curl_global_cleanup();
    return 0;
}

makefile

# 交叉编译工具链
CC = arm-linux-gnueabihf-gcc

# curl 库的安装路径
CURL_DIR = /home/lxh/arm-libs/install

# 编译选项
CFLAGS = -I$(CURL_DIR)/include
LDFLAGS = -L$(CURL_DIR)/lib -lcurl -lssl -lcrypto

# 目标可执行文件
TARGET = curl_example

# 源文件
SRCS = testcurl.c

# 默认目标
all: $(TARGET)

# 编译规则
$(TARGET): $(SRCS)
	$(CC) $(CFLAGS) -o $(TARGET) $(SRCS) $(LDFLAGS)

# 清理
clean:
	rm -f $(TARGET)


http://www.niftyadmin.cn/n/5868824.html

相关文章

pnpm的基本用法

以下是 pnpm 的核心命令和使用指南&#xff0c;涵盖从安装依赖到项目管理的常见操作&#xff1a; 1. 基础命令 (1) 安装依赖 pnpm install # 安装 package.json 中的所有依赖 pnpm install <包名> # 安装指定包&#xff08;自动添加到 dependencies&#xf…

跟着AI学vue第九章

第九章&#xff1a;Vue 生态与跨端开发 1. 深入探索 Vue 生态工具 Vue 生态就像是一个热闹的“软件小镇”&#xff0c;里面有各种各样的工具和资源&#xff0c;能帮助你把 Vue 项目打造得更好。 Vue CLI 高级用法 Vue CLI 就像是小镇里的“建筑规划师”&#xff0c;一开始它…

DeepSeek 提示词:基础结构

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

【设计原则】开闭原则

开闭原则&#xff08;OCP&#xff09;在C#中的实践&#xff1a;如何设计可扩展的代码 一、什么是开闭原则&#xff1f;二、未遵循开闭原则的案例三、用开闭原则重构代码四、进一步优化&#xff1a;动态加载操作五、开闭原则的优势六、适用场景七、总结 一、什么是开闭原则&…

【GO】学习笔记

目录 学习链接 开发环境 开发工具 GVM - GO多版本部署 GOPATH 与 go.mod go常用命令 环境初始化 编译与运行 GDB -- GNU 调试器 基本语法与字符类型 关键字与标识符 格式化占位符 基本语法 初始值&零值&默认值 变量声明与赋值 _ 下划线的用法 字…

halcon三维点云数据处理(二十七)remove_bin_for_3d_object_localization

目录 一、remove_bin_for_3d_object_localization代码第一部分二、remove_bin_for_3d_object_localization代码第二部分三、效果图一、remove_bin_for_3d_object_localization代码第一部分 1、读图构建3D模型。 2、一次二值化选取区域。 3、一次和背景差值选取区域。 4、在二维…

K8S能部署大数据集群吗?为什么?K8S的HPA功能可以作为大数据处理消息积压的问题(Kafka的分区)

K8S 即 Kubernetes&#xff0c;是可以部署大数据集群的 &#xff0c;原因如下 资源管理与调度优势&#xff1a;K8S 拥有强大的资源管理和调度能力。大数据集群运行时&#xff0c;不同组件对资源需求差异大&#xff0c;像计算密集型的 MapReduce 任务和存储密集型的 HDFS。K8S …

方法调用重点知识

方法里调方法&#xff0c;通过大括号内直接声明“方法名称&#xff08;&#xff09;”的方式&#xff0c;也是对象来调用方法的&#xff0c;只能调用本类拥有的方法&#xff0c;都是通过对象.来进行调用&#xff0c;只不过省略了this而已&#xff0c;别人即其他类的方法只能通过…