在 CentOS 上配置 C++ 交叉编译,一般流程如下(以常见目标平台为例,如 ARM / AArch64 / MIPS 等):
cat /etc/centos-release
uname -m
通常 CentOS 是 x86_64,需要交叉编译到别的架构。
sudo yum install -y arm-linux-gnu-gcc arm-linux-gnu-g++
sudo yum install -y aarch64-linux-gnu-gcc aarch64-linux-gnu-g++
包名可能因 CentOS 版本不同略有差异
若找不到,可启用 EPEL:
sudo yum install -y epel-release
例如下载 gcc-linaro-*-x86_64_aarch64-linux-gnu.tar.xz:
tar -xf gcc-linaro-*.tar.xz -C /opt
export PATH=/opt/gcc-linaro-*/bin:$PATH
验证:
aarch64-linux-gnu-g++ --version
// hello.cpp
#include <iostream>
int main() {
std::cout << "Hello Cross Compile" << std::endl;
return 0;
}
aarch64-linux-gnu-g++ hello.cpp -o hello_arm64
arm-linux-gnu-g++ hello.cpp -o hello_arm
查看文件类型:
file hello_arm64
如果程序依赖目标系统的库(如 libstdc++、pthread):
aarch64-linux-gnu-g++ \
--sysroot=/path/to/target/sysroot \
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 /path/to/sysroot)
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
g++--sysrootlibstdc++.soaarch64-linux-gnu-g++ -static hello.cpp -o hello
arm64v8/ubuntu)yum install -y aarch64-linux-gnu-g++
aarch64-linux-gnu-g++ hello.cpp -o hello
file hello
如果你能告诉我:
我可以给你更精确的配置方案。