【发布时间】:2012-05-31 12:31:40
【问题描述】:
对于运行测试用例等。我想为主机系统(/usr/bin/gcc 等)编译我们的 buildroot 环境的一部分。
我尝试在 /usr 中指定一个 external_toolchain,但失败了。有没有人设法做这样的事情?
buildroot 手册说这是不受支持的,因为他们无法将其导入 rootfs。但是对于测试用例,rootfs 不是必需的。
【问题讨论】:
标签: buildroot
对于运行测试用例等。我想为主机系统(/usr/bin/gcc 等)编译我们的 buildroot 环境的一部分。
我尝试在 /usr 中指定一个 external_toolchain,但失败了。有没有人设法做这样的事情?
buildroot 手册说这是不受支持的,因为他们无法将其导入 rootfs。但是对于测试用例,rootfs 不是必需的。
【问题讨论】:
标签: buildroot
是的,很遗憾,这是不可能的。要对 Buildroot 有用,工具链必须是“纯”工具链,即仅包含 C 库二进制文件和头文件。您的 /usr 被您主机上的大量库所困扰,而且由于 Buildroot 制作了工具链 sysroot 的完整副本(在您的情况下是 /usr),它会复制很多很多东西。
因此,我们绝对不支持,也不打算支持它。您还可以决定使用 x86 或 x86_64 交叉编译器构建您的程序,让 Buildroot 生成一个最小的 Linux 系统,然后直接在您的开发 PC 上 chroot 进入它。
【讨论】:
当前的文档似乎也解释了这是不可能的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; \
【讨论】: