温馨提示×

centos如何交叉编译c++

小樊
44
2026-09-30 04:18:16
栏目: 编程语言

在 CentOS 上进行 C++ 交叉编译,通常是指:在 x86_64 的 CentOS 上,编译出能在其他架构(如 ARM、aarch64、mips 等)上运行的程序。下面按常见场景 + 实操步骤说明。


一、交叉编译的基本原理

交叉编译 = 本机编译器(host) + 目标平台工具链(target)

关键要素:

  • 交叉编译器(如 aarch64-linux-gnu-g++)
  • 目标平台的头文件和库(sysroot)
  • 正确的 --target / -march 等参数

二、最常见场景:编译 ARM / AArch64 程序

1️⃣ 安装交叉编译工具链(CentOS 7/8)

CentOS 8 / Stream

sudo dnf install -y gcc-c++ aarch64-linux-gnu-gcc aarch64-linux-gnu-g++

CentOS 7

sudo yum install -y centos-release-scl
sudo yum install -y devtoolset-9-gcc-c++
sudo yum install -y arm-linux-gnu-gcc

如果没有对应包,可使用 Linaro / Bootlin 工具链(推荐)


2️⃣ 使用交叉编译器编译 C++

示例 test.cpp:

#include <iostream>
int main() {
    std::cout << "Hello ARM" << std::endl;
}

编译:

aarch64-linux-gnu-g++ test.cpp -o test_arm

查看文件类型:

file test_arm
# test_arm: ELF 64-bit LSB executable, ARM aarch64

三、使用第三方交叉工具链(推荐)

Linaro 工具链(ARM 官方维护)

wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
tar -xf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz

使用:

export PATH=$PWD/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:$PATH
aarch64-linux-gnu-g++ test.cpp -o test_arm

四、CMake 交叉编译(重要)

1️⃣ 编写工具链文件 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/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=../toolchain.cmake ..
make

五、带第三方库的交叉编译(如 OpenCV / Boost)

要点:

  • 库必须用交叉编译器编译
  • 指定 sysroot
aarch64-linux-gnu-g++ main.cpp \
  -I/opt/sysroot/usr/include \
  -L/opt/sysroot/usr/lib \
  -lopencv_core -lopencv_highgui

六、常见问题

❌ cannot find crt1.o

原因:缺少目标平台 sysroot
解决:安装 aarch64-linux-gnu-glibc 或指定 --sysroot

aarch64-linux-gnu-g++ test.cpp --sysroot=/opt/sysroot

❌ 运行时 Illegal instruction

原因:CPU 架构不匹配
解决:指定正确 -march

aarch64-linux-gnu-g++ -march=armv8-a test.cpp

七、总结

✅ CentOS 交叉编译核心步骤:

  1. 安装 / 下载交叉编译器
  2. 使用 xxx-g++ 编译
  3. CMake 用 toolchain 文件
  4. 第三方库必须交叉编译
  5. 注意 sysroot 和架构匹配

如果你告诉我:

  • 目标平台(ARM / MIPS / RISC-V?)
  • CentOS 版本(7 / 8 / Stream)
  • 是否用 CMake / Makefile / 第三方库

我可以给你完全针对性的命令。

0 踩