0

0

c++如何进行交叉编译_c++ arm-linux-gnueabihf工具链配置【指南】

裘德小鎮的故事

裘德小鎮的故事

发布时间:2026-01-01 13:07:02

|

623人浏览过

|

来源于php中文网

原创

arm-linux-gnueabihf工具链仅适用于ARMv7+、硬浮点、glibc系统;需通过cpuinfo、readelf、ldd确认目标架构/ABI/C库;推荐apt或brew安装预编译包;CMake必须指定sysroot并安装libc6-dev-armhf-cross;链接C++11原子操作需显式添加-latomic。

c++如何进行交叉编译_c++ arm-linux-gnueabihf工具链配置【指南】

交叉编译前先确认目标架构和 ABI 类型

不是所有 ARM Linux 工具链都通用。arm-linux-gnueabihf 明确指向:ARMv7+ 硬件、硬浮点(VFP/NEON)、EABI + GNU libc(glibc)的组合。如果你的目标板是树莓派 Zero(ARMv6)、或用的是 musl(如 Buildroot 默认),arm-linux-gnueabihf-gcc 生成的二进制很可能运行失败,报 Illegal instructioncannot execute binary file: Exec format error

  • 查目标板 CPU 架构:
    cat /proc/cpuinfo | grep -E "(model name|CPU architecture)"
  • 查系统 ABI:
    readelf -A /bin/ls | grep -i abi
    (输出含 Tag_ABI_VFP_args: 1 表示硬浮点)
  • 查 C 库类型:
    ldd /bin/ls | grep libc
    (显示 libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 才匹配)

安装 arm-linux-gnueabihf 工具链的三种可靠方式

别从源码手动编译 binutils/gcc —— 耗时且易出错。优先选预编译包:

  • Debian/Ubuntu:直接安装官方维护包:
    sudo apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
    ,工具链路径通常为 /usr/bin/arm-linux-gnueabihf- 开头
  • macOS(Apple Silicon):brew install arm-linux-gnueabihf-binutils arm-linux-gnueabihf-gcc(注意:Homebrew 的 arm-linux-gnueabihf-gcc 默认不带 C++ 支持,需额外装 arm-linux-gnueabihf-gcc@12 并确认 arm-linux-gnueabihf-g++ 存在)
  • 离线部署:下载 ARM GNU Toolchain 官方预编译版(如 gcc-arm-none-eabi 不适用!要选 gcc-arm-linux-gnueabihf),解压后把 bin/ 加入 $PATH

CMake 中正确设置 CXX_COMPILER 和 sysroot

只设 CMAKE_CXX_COMPILER 不够 —— 缺少目标系统头文件和库会导致编译失败,典型错误:fatal error: bits/libc-header-start.h: No such file or directory

  • 必须同时指定 sysroot,它应指向工具链附带的根文件系统镜像(不是你的宿主机 /
  • Debian 包默认不自带完整 sysroot,需额外安装:
    sudo apt install libc6-dev-armhf-cross
    ,头文件和库位于 /usr/arm-linux-gnueabihf/
  • CMake 命令示例:
    cmake -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ \
          -DCMAKE_SYSROOT=/usr/arm-linux-gnueabihf \
          -DCMAKE_FIND_ROOT_PATH=/usr/arm-linux-gnueabihf \
          -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
          -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
          -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
          ..

链接阶段常见符号缺失与 -latomic 陷阱

在 ARMv7 上启用 C++11 std::atomic 或使用 std::thread 时,arm-linux-gnueabihf-g++ 可能报错:undefined reference to '__atomic_load_4'。这不是你代码的问题,而是 GCC 默认未链接原子操作支持库。

XPaper Ai
XPaper Ai

AI撰写论文、开题报告生成、AI论文生成器尽在XPaper Ai论文写作辅助指导平台

下载

立即学习C++免费学习笔记(深入)”;

  • 解决方案:在链接时显式加 -latomic(注意不是 -lstdc++-lc
  • 若用 CMake,在 target_link_libraries() 后追加:
    target_link_libraries(your_target PRIVATE atomic)
  • 某些旧版工具链(GCC -D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 宏来启用内建原子指令,但现代 arm-linux-gnueabihf(GCC 9+)已默认开启

交叉编译最常被忽略的,是 sysroot 路径是否真实包含目标平台的 libstdc++.solibpthread.so —— 光有头文件不够,链接器会去 sysroot 下找动态库,路径错一阶就静默链接宿主机库,导致运行时报错。

相关专题

更多
format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

617

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

427

2024.06.27

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

184

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

263

2023.10.25

Java 并发编程高级实践
Java 并发编程高级实践

本专题深入讲解 Java 在高并发开发中的核心技术,涵盖线程模型、Thread 与 Runnable、Lock 与 synchronized、原子类、并发容器、线程池(Executor 框架)、阻塞队列、并发工具类(CountDownLatch、Semaphore)、以及高并发系统设计中的关键策略。通过实战案例帮助学习者全面掌握构建高性能并发应用的工程能力。

54

2025.12.01

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

3966

2023.07.31

网页undefined是什么意思
网页undefined是什么意思

网页undefined是指页面出现了未知错误的意思,提示undefined一般是在开发网站的时候定义不正确或是转换不正确,或是找不到定义才会提示undefined未定义这个错误。想了解更多的相关内容,可以阅读本专题下面的文章。

2898

2024.08.14

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

137

2025.12.25

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.3万人学习

Git 教程
Git 教程

共21课时 | 2.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号