【问题标题】:buildroot environment with host toolchain使用主机工具链构建根环境
【发布时间】:2012-05-31 12:31:40
【问题描述】:

对于运行测试用例等。我想为主机系统(/usr/bin/gcc 等)编译我们的 buildroot 环境的一部分。

我尝试在 /usr 中指定一个 external_toolchain,但失败了。有没有人设法做这样的事情?

buildroot 手册说这是不受支持的,因为他们无法将其导入 rootfs。但是对于测试用例,rootfs 不是必需的。

【问题讨论】:

    标签: buildroot


    【解决方案1】:

    是的,很遗憾,这是不可能的。要对 Buildroot 有用,工具链必须是“纯”工具链,即仅包含 C 库二进制文件和头文件。您的 /usr 被您主机上的大量库所困扰,而且由于 Buildroot 制作了工具链 sysroot 的完整副本(在您的情况下是 /usr),它会复制很多很多东西。

    因此,我们绝对不支持,也不打算支持它。您还可以决定使用 x86 或 x86_64 交叉编译器构建您的程序,让 Buildroot 生成一个最小的 Linux 系统,然后直接在您的开发 PC 上 chroot 进入它。

    【讨论】:

      【解决方案2】:

      当前的文档似乎也解释了这是不可能的https://github.com/buildroot/buildroot/blob/2018.08/docs/manual/configure.txt#L198

      我们也不支持使用分发工具链(即 您的发行版安装的 gcc/binutils/C 库)作为 为目标构建软件的工具链。这是因为你的 分发工具链不是“纯”工具链(即仅与 C/C++ 库),因此我们无法将其正确导入 Buildroot 构建环境。因此,即使您正在为 x86 或 x86_64 目标,您必须生成一个交叉编译工具链 Buildroot 或 crosstool-NG。

      此外,当前的 Buildroot 似乎会检查您的工具链路径是否是全局工具链,如果是 https://github.com/buildroot/buildroot/blob/2018.08/toolchain/helpers.mk#L395,则会自动退出

      with_sysroot=`$${__CROSS_CC} -v 2>&1 |sed -r -e '/.* --with-sysroot=([^[:space:]]+)[[:space:]].*/!d; s//\1/'`; \
      if test "$${with_sysroot}"  = "/" ; then \
          echo "Distribution toolchains are unsuitable for use by Buildroot," ; \
          echo "as they were configured in a way that makes them non-relocatable,"; \
          echo "and contain a lot of pre-built libraries that would conflict with"; \
          echo "the ones Buildroot wants to build."; \
          exit 1; \
      fi; \
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-02
        • 2017-01-31
        • 1970-01-01
        • 2020-01-23
        • 1970-01-01
        • 1970-01-01
        • 2012-01-26
        • 2013-02-01
        相关资源
        最近更新 更多