2

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

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

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

4

2 回答 2

2

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

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

于 2012-06-18T13:38:21.340 回答
0

当前的文档似乎也解释了这是不可能的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; \
于 2019-02-21T09:51:34.823 回答