libcurl Linux ARM交叉编译
·
摘要:本文详细解析了在 x86 Linux 主机上交叉编译 aarch64 (ARM64) 平台专用 curl 的完整配置脚本。通过 --host、--build 参数指定交叉编译目标,使用 SYSROOT 定义目标平台根文件系统,并配置交叉编译工具链。通过 --without-xxx 禁用所有第三方依赖(如 SSL、zlib),以及 --disable-xxx 关闭非 HTTP 协议和辅助功能,最终生成一个仅支持 IPv4 + HTTP 1.1、零外部依赖、体积极小的 curl 可执行程序,适用于资源受限的嵌入式 Linux 设备。
1.下载libcurl库
地址:https://curl.haxx.se/download/
下载后解压:unzip curl-x.xx.x.zip
2.交叉编译
在Linux中通过你自己所对应的交叉编译工具链 进行编译;
例如
make distclean
export SYSROOT=/usr/aarch64-linux-gnu
./configure \
--prefix=/home/XXX/make_Curl \
--host=aarch64-linux-gnu \
--build=x86_64-pc-linux-gnu \
CC="aarch64-linux-gnu-gcc --sysroot=$SYSROOT" \
CXX="aarch64-linux-gnu-g++ --sysroot=$SYSROOT" \
AR=aarch64-linux-gnu-ar \
RANLIB=aarch64-linux-gnu-ranlib \
STRIP=aarch64-linux-gnu-strip \
CPPFLAGS="-I$SYSROOT/usr/include" \
LDFLAGS="-L$SYSROOT/lib -L$SYSROOT/usr/lib" \
--without-ssl \
--without-libpsl \
--without-libidn2 \
--without-brotli \
--without-zstd \
--without-nghttp2 \
--without-zlib \
--disable-ipv6 \
--disable-ftp \
--disable-tftp \
--disable-smb \
--disable-gopher \
--disable-telnet \
--disable-ldap \
--disable-ldaps \
--disable-rtsp \
--disable-pop3 \
--disable-imap \
--disable-smtp \
--disable-mqtt \
--disable-dict \
--disable-file \
--disable-manual \
--disable-docs
完整脚本逐行解析(交叉编译 aarch64 平台 curl,极简 http 专用版本)
1. 前置清理
make distclean
- 作用:彻底清空之前编译产生的所有中间文件、Makefile、配置缓存;
- 场景:多次重新编译前必执行,避免旧配置缓存导致交叉编译异常。
2. 定义交叉编译根文件系统
export SYSROOT=/usr/aarch64-linux-gnu
SYSROOT:ARM64 (aarch64) 平台系统库、头文件根目录;- 交叉编译时,编译器会从此路径读取目标平台的
.h头文件、.so/.a库,而非主机 x86 的系统文件。
3. configure 交叉编译核心参数分段拆解
基础安装路径
--prefix=/home/XXX/make_Curl
编译完成后执行 make install,所有库、头文件、curl 二进制都会安装到该目录,方便单独打包拷贝到嵌入式设备,不污染主机系统。
编译平台三要素(交叉编译关键)
--host=aarch64-linux-gnu
--build=x86_64-pc-linux-gnu
--build:编译主机,当前电脑 x86_64 Linux;--host:目标运行平台,程序最终跑在 aarch64 嵌入式板子; configure 依靠这两个参数自动切换交叉编译逻辑。
交叉编译工具链指定
CC="aarch64-linux-gnu-gcc --sysroot=$SYSROOT"
CXX="aarch64-linux-gnu-g++ --sysroot=$SYSROOT"
AR=aarch64-linux-gnu-ar
RANLIB=aarch64-linux-gnu-ranlib
STRIP=aarch64-linux-gnu-strip
CC/CXX:C/C++ 交叉编译器,携带--sysroot指定目标系统根目录,编译器自动链接 aarch64 库;AR:静态库打包工具;RANLIB:为静态库生成索引,加速链接;STRIP:后期裁剪可执行文件多余调试符号,减小嵌入式固件体积。
头文件 / 库文件搜索路径
CPPFLAGS="-I$SYSROOT/usr/include"
LDFLAGS="-L$SYSROOT/lib -L$SYSROOT/usr/lib"
CPPFLAGS:预编译参数,-I指定 aarch64 平台头文件目录;LDFLAGS:链接参数,-L指定 aarch64 系统库搜索路径; 防止编译时误引用主机 x86 的头文件 / 库导致架构不匹配报错。
4. --without-xxx:禁用所有第三方依赖
--without-ssl # 关闭SSL/TLS,不支持https,仅纯http
--without-libpsl # 不启用域名后缀解析库
--without-libidn2 # 关闭国际化域名支持
--without-brotli # 不支持brotli压缩
--without-zstd # 不支持zstd压缩
--without-nghttp2 # 关闭HTTP2,仅HTTP1.1
--without-zlib # 关闭gzip/deflate压缩
目的:零外部第三方库依赖,编译出来的 curl 不依赖 openssl、zlib 等,嵌入式部署最简单。
5. --disable-xxx:禁用全部非 HTTP 协议与多余功能
网络协议全部关闭
--disable-ipv6 # 不支持IPv6,仅IPv4
--disable-ftp --disable-tftp --disable-smb --disable-gopher
--disable-telnet --disable-ldap --disable-ldaps --disable-rtsp
--disable-pop3 --disable-imap --disable-smtp --disable-mqtt
--disable-dict --disable-file
仅保留 HTTP/HTTPS(这里又关了 ssl,只剩纯 HTTP),砍掉所有文件传输、邮件、物联网、流媒体协议,大幅减小最终程序体积。
文档 / 辅助功能关闭
--disable-manual
--disable-docs
不生成 man 手册、html 文档,减少编译产物与编译耗时。
整体编译目标总结
- 平台:x86 主机交叉编译 aarch64 (ARM64) 架构 curl;
- 功能:仅支持 IPv4 + HTTP 1.1,无 HTTPS、无压缩、无 HTTP2、无其他任何协议;
- 依赖:完全不依赖第三方库,静态链接系统基础 libc;
- 产物:安装到自定义目录,体积极小,适合资源受限的嵌入式 Linux 设备;
- 适用场景:仅需要简单 http get/post 接口的工控 / 移远模组 Linux 系统。
后续编译命令补充
配置完成后执行编译安装:
make -j$(nproc)
make install
安装目录 /home/XXX/make_Curl 下:
- bin/curl:可执行程序
- lib/libcurl.a:静态库(可集成到自己的 C/C++ 程序)
- include/curl:开发头文件
更多推荐

所有评论(0)