交叉编译curl(OpenSSL)移植ARM详细步骤_openssl arm
运行配置脚本
使用 Configure
脚本配置 OpenSSL,指定目标平台和安装路径:
curl downloads 各个版本
Old 1.1.1 Releases | OpenSSL Library 各个版本
从 OpenSSL 官网下载源码包
tar -xzf openssl-1.1.1b.tar.gzcd 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
:指定交叉编译工具链前缀。
-
-
调整配置(可选)
如果需要调整配置,可以编辑生成的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 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)/includeLDFLAGS = -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)