如何在amd64 Linux主机上构建arm64(aarch64)二进制文件并打包发布?
在amd64主机上构建aarch64 Linux C/C++二进制及打包指南
基于你使用的KDE neon(Ubuntu 20.04衍生版),以下是完整的交叉编译、打包流程:
1. 安装aarch64交叉编译工具链
直接通过官方源安装标准工具链:
sudo apt update && sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
验证安装是否成功:
aarch64-linux-gnu-gcc --version
2. 编译C/C++项目
根据项目使用的构建系统,选择对应配置方式:
2.1 Makefile项目
直接在编译时指定交叉编译器:
make CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++
若自定义Makefile包含硬编码编译器路径,需手动替换为aarch64-linux-gnu-gcc/aarch64-linux-gnu-g++。
2.2 CMake项目
方法1:命令行直接指定参数
mkdir build-aarch64 && cd build-aarch64 cmake .. \ -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc \ -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \ -DCMAKE_SYSTEM_NAME=Linux \ -DCMAKE_SYSTEM_PROCESSOR=aarch64 make
方法2:使用工具链文件
创建aarch64-toolchain.cmake文件:
set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) # 确保只查找目标架构的库和头文件 set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
然后编译:
cmake .. -DCMAKE_TOOLCHAIN_FILE=../aarch64-toolchain.cmake make
3. 打包为DEB包
3.1 准备debian打包配置
若项目无debian/目录,用dh_make初始化:
dh_make --createorig -s -y
编辑debian/control文件,将Architecture字段设为arm64,并补充依赖、项目描述等信息。
3.2 交叉编译打包
直接指定架构构建:
DEB_BUILD_ARCH=amd64 DEB_HOST_ARCH=arm64 dpkg-buildpackage -b -us -uc
若需要干净构建环境,可使用pbuilder:
# 创建aarch64构建环境 sudo pbuilder create --architecture arm64 --distribution focal # 构建包 sudo pbuilder build ../your-project_*.dsc
4. 打包为RPM包
4.1 安装RPM打包依赖
sudo apt install rpm crossbuild-essential-arm64
4.2 配置spec文件
修改项目的RPM spec文件,添加以下定义指定交叉编译参数:
%define _target_cpu aarch64 %define _host_cpu aarch64 %define __cc aarch64-linux-gnu-gcc %define __cxx aarch64-linux-gnu-g++
同时将BuildArch字段设为aarch64。
4.3 构建RPM
rpmbuild --target aarch64 -ba your-project.spec
5. 验证二进制架构
用file命令确认生成的文件为aarch64架构:
file path/to/your/compiled/binary
输出应包含aarch64或ARM aarch64字样。
内容的提问来源于stack exchange,提问作者Ekaterina Ivanova iceja.net
相关产品推荐
相关产品推荐

