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

运行配置脚本

使用 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,例如:

    • 修改 CFLAGSLDFLAGS 以优化编译选项。

    • 确保 -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 支持。

  • CCCXX:指定交叉编译器

编译和安装

复制代码
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)
相关推荐
zlinear数据采集卡2 天前
数据采集卡从入门到精通(10):采样率与分辨率的核心关系——反比律、架构分布与过采样
arm开发·嵌入式硬件·算法·fpga开发·架构·开源
CIAS2 天前
uniontechos-server-20 1050 u2a pxe Server -x86 arm loongarch
arm开发
振南的单片机世界2 天前
推挽vs开漏:一个“强拉硬灌”,一个“只拉不管”
arm开发·stm32·单片机·嵌入式硬件
zlinear数据采集卡2 天前
数据采集卡从入门到精通(7):流水线型ADC——级级接力,高速与高精的平衡术
开发语言·arm开发·嵌入式硬件·fpga开发·c#
硅农程序猿3 天前
从需求到硅片| 一文讲清数字芯片设计流程
arm开发·硬件架构·risc-v
秋田君3 天前
QT_网络编程体系
网络·arm开发·qt
zlinear数据采集卡4 天前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
振南的单片机世界4 天前
SysTick硬核拆解:既是HAL_Delay的“心跳”,也是RTOS的“节拍器”
arm开发·stm32·单片机·嵌入式硬件
北京盛世宏博4 天前
以太网温湿度传感器星型组网三种供电布线技术对比文档
arm开发·以太网·原理·传感器·温湿度·原来
zlinear数据采集卡4 天前
D223 ADC数据处理流水线:从原始采样值到工程单位的完整转换链
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#