【问题标题】:Building cross compiler for arm HF为 arm HF 构建交叉编译器
【发布时间】:2014-07-04 14:12:58
【问题描述】:

我正在尝试为 arm (target=arm-linux-gnueabihf) 构建交叉编译器 来自GCC 4.6 源代码,带有选项-with-float=hard

我的编译过程在 libgcc (unable to find /asm/errno.h file) 上失败,我想我用错了sysroot

配置选项: --with-float=hard --with-mode=thumb --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-interwork --enable-multilib --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --disable-bootstrap --disable-libgomp --disable-libsanitizer --enable-bootstrap=no --target=arm-linux-gnueabihf --with-sysroot=$sysroot --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-multilib --disable-sjlj-exceptions --with-arch=armv7-a --with-fpu=vfpv3-d16

$sysroot 是本地 sysroot /usr/

host=linux-x86_64

有没有人知道如何构建基于 gcc 4.6 的 arm 硬浮点交叉编译器?

【问题讨论】:

  • 什么平台?您使用了哪些选项?等等,需要更多信息。作为替代方案,我相信您可以在某处获得预构建的编译器。
  • @MarcGlisse 我已经更新了信息,我需要自己构建它
  • 你还是没有说你的宿主系统是什么,$sysroot是什么,你已经放了什么,为什么需要自己构建等等(asm/errno.h可能是由内核提供)
  • 您可以获得qemu_debootstrap,它将安装 Debian 或 Ubuntu sysroot(确保它安装了 build_essential 软件包)。或者你可以从 linaro.org 下载图片,我想。

标签: gcc compiler-construction arm


【解决方案1】:

构建交叉编译器比您想象的要复杂。有一个循环依赖,没有 GLIBC 就无法构建 GCC,没有 GCC 也无法构建 GLIBC。该解决方案涉及构建编译器 3 次,构建 GLIBC 两次,每次都启用越来越多的功能,而且很难解释。

如果您有一个现有的 sysroot,那么事情就容易多了。循环被打破了,所以它应该可以正常工作,假设 sysroot 包含头文件以及二进制文件。

除了不是那么容易:事情会随着时间而改变,所以旧的编译器很难在新的 sysroot 中找到它需要的文件(即使它们很可能存在)。您也许可以找到 4.6 时代的旧 sysroot,但很可能它们会使用“softfp”ABI,因此它们无法与您的 HF 编译器一起使用。

我建议使用Crosstool-ng 之类的工具,它是一种尝试自动化流程并从源代码构建工作的交叉编译器和库的工具。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-13
    • 2014-09-30
    • 2020-02-05
    • 2019-05-21
    • 2011-07-24
    • 2014-12-05
    • 2012-08-04
    • 1970-01-01
    相关资源
    最近更新 更多