温馨提示×

centos怎样配置c++交叉编译

小樊
35
2026-09-21 07:09:42
栏目: 编程语言

在 CentOS 上配置 C++ 交叉编译,一般流程如下(以常见目标平台为例,如 ARM / AArch64 / MIPS 等):


一、确认主机环境

cat /etc/centos-release
uname -m

通常 CentOS 是 x86_64,需要交叉编译到别的架构。


二、安装交叉编译工具链

1️⃣ 使用系统仓库(推荐,简单)

ARM 32 位

sudo yum install -y arm-linux-gnu-gcc arm-linux-gnu-g++

ARM 64 位(AArch64)

sudo yum install -y aarch64-linux-gnu-gcc aarch64-linux-gnu-g++

包名可能因 CentOS 版本不同略有差异
若找不到,可启用 EPEL:

sudo yum install -y epel-release

2️⃣ 使用官方 Linaro / Bootlin 工具链(更通用)

例如下载 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

三、编写测试 C++ 程序

// hello.cpp
#include <iostream>
int main() {
    std::cout << "Hello Cross Compile" << std::endl;
    return 0;
}

四、交叉编译 C++ 程序

ARM 64

aarch64-linux-gnu-g++ hello.cpp -o hello_arm64

ARM 32

arm-linux-gnu-g++ hello.cpp -o hello_arm

查看文件类型:

file hello_arm64

五、指定 sysroot(非常重要)

如果程序依赖目标系统的库(如 libstdc++、pthread):

aarch64-linux-gnu-g++ \
  --sysroot=/path/to/target/sysroot \
  hello.cpp -o hello_arm64

sysroot 通常来自:

  • 目标板的根文件系统
  • Yocto / Buildroot 输出
  • Linaro rootfs

六、CMake 交叉编译配置(推荐)

1️⃣ 创建 toolchain 文件

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)

2️⃣ 使用 CMake 编译

mkdir build && cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../arm64-toolchain.cmake ..
make

七、常见问题

❌ 找不到 c++ 头文件

  • 没装 g++
  • 没指定 --sysroot

❌ 运行时找不到 libstdc++.so.6

  • 拷贝目标系统的 libstdc++.so
  • 或使用静态链接:
aarch64-linux-gnu-g++ -static hello.cpp -o hello

❌ CentOS 7 太老

  • 建议用 CentOS 8 / Stream
  • 或用 Docker(arm64v8/ubuntu)

八、最简示例总结

yum install -y aarch64-linux-gnu-g++
aarch64-linux-gnu-g++ hello.cpp -o hello
file hello

如果你能告诉我:

  • 目标平台(ARM?RISC-V?MIPS?)
  • CentOS 版本
  • 是否用 CMake / Makefile / Yocto

我可以给你更精确的配置方案。

0 踩