在 CentOS 上配置 C++ 交叉编译环境,通常取决于你的 目标平台(架构 / 系统)。下面我按最常见场景给你一个完整、可操作的说明,并附上示例。
先确认你要交叉编译到什么平台,例如:
| 目标平台 | 说明 |
|---|---|
| ARM 32 位 | arm-linux-gnueabihf |
| ARM 64 位 | aarch64-linux-gnu |
| MIPS | mips-linux-gnu |
| RISC-V | riscv64-linux-gnu |
| 老版本 glibc | 低版本 Linux |
下面以 ARM64(aarch64) 为例,其他架构几乎一样。
CentOS 7 / 8 / Stream 都支持:
# 查看可用交叉编译器
yum search aarch64-linux-gnu
# 安装 ARM64 交叉编译器
sudo yum install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
验证:
aarch64-linux-gnu-g++ --version
sudo yum install -y epel-release
sudo yum install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
hello.cpp#include <iostream>
int main() {
std::cout << "Hello ARM64!" << std::endl;
return 0;
}
aarch64-linux-gnu-g++ hello.cpp -o hello_arm64
file hello_arm64
输出类似:
hello_arm64: ELF 64-bit LSB executable, ARM aarch64
✅ 说明交叉编译成功
如果目标系统 库版本不同,必须指定 sysroot,否则可能出现:
undefined reference to `std::__cxx11::basic_string`
aarch64-linux-gnu-g++ \
--sysroot=/opt/arm64-rootfs \
hello.cpp -o hello_arm64
sysroot 通常来自:
arm64-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 /opt/arm64-rootfs)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
mkdir build && cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../arm64-toolchain.cmake ..
make
sudo yum install -y gcc-arm-linux-gnu g++-arm-linux-gnu
编译:
arm-linux-gnueabihf-g++ test.cpp -o test_arm
arm-linux-gnu-g++: command not found✅ 未安装交叉编译器或路径未加入 PATH
cannot find -lstdc++✅ 未指定 --sysroot 或目标 rootfs 不完整
✅ 检查:
ldd hello_arm64
若提示 not a dynamic executable,可能是:
✅ 一般不需要
除非你:
否则 直接用发行版提供的交叉编译器 最稳定。
# ARM64
sudo yum install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
# 编译
aarch64-linux-gnu-g++ main.cpp -o main
如果你能告诉我:
我可以给你 完全定制化的交叉编译方案。