如何在Crosstools-NG中使用加拿大人以跨越本土的方式在手臂板上使用gcc?

时间:2015-03-23 00:29:56

标签: c++ c gcc cross-compiling crosstool-ng

根据我的理解,要在使用我的x86机器编译该手臂本机gcc时编译可执行文件的armv5板上使用gcc,我需要这个设置:

  • 机器配置工具链组件:配置机器:x86_64
  • 机器构建工具链组件:构建机器:x86_64
  • 运行工具链的机器:主机:ARM
  • 机器工具链正在生成以下代码:目标机器:ARM

根据阅读交叉文档here,我应该使用跨本机设置,但当我尝试使用ct-ng menuconfig启用时,我需要启用:

  • Paths and misc options -> Try features marked as EXPERIMENTAL

  • 中进行实验
  • Toolchain options -> Type (Cross) -> Cross-native (NO CODE!) (EXPERIMENTAL)

但当然Cross-Native不起作用,因为它没有代码。谷歌搜索引导我在邮件列表上进行thisthis讨论,说我应该尝试使用加拿大构建样式,但我有点迷失了什么元组和什么用于{{{在crosstool-ng的menuconfig中1}}和Build System,或者如果这仍然是考虑两个讨论如何超过3年的正确方法。

关于SO的帖子似乎暗示构建系统和主机系统元组应该是Host System

要清楚,我已经能够使用crosstool-ng生成的交叉编译器编译和运行可执行文件,现在我想在armv5系统上安装编译器。

编辑:所以我刚刚将crosstools-ng生成的普通交叉编译器(arm-unknown-linux-gnueabi)添加到arm-unknown-linux-gnueabi中的元组,并且能够编译gcc以及让它在手臂上执行。 This

我现在只需要修复库情况,应该是这样。

1 个答案:

答案 0 :(得分:0)

这个答案是我original question关于交叉编译工具链的一般工作流程的扩展。

我有一个正确的一般想法,你必须做一个Canadian-Build,主机系统元组是我之前制作的arm-unknown-linux-gnueabi交叉编译器。确保将它包含在您的路径中或对/ bin进行一些符号链接,或者您想要处理它。或者

在使用普通硬盘驱动器的Ubuntu Vmware虚拟机中使用3/4内核I5-3570k和~2GB内存进行构建时,我不得不等待大约30分钟。使用SSD可能会显着提高速度。

完成此操作后,您应该拥有Crosstools-NG为您制作的输出目录,其中包含ARM架构的工具链。您可以通过在任何二进制文件上运行file filename来验证这一点。

现在,对于图书馆的情况,我花了一段时间,并给了一点点混乱。在工具链输出中应该有一个rootfs文件夹。该文件夹包含您要编译的目标的预期根文件系统(在本例中为arm)。您需要从用户复制/lib文件夹和lib,镜像此rootfs文件夹的文件夹层次结构。

您可以通过执行objdump -p filename并查看NEEDED条目来验证您是否设置了库,这些条目指向应该位于rootfs中的所需库。

如果你使用的是基于busybox的rootfs,那么假设你没有静态编译它,那么你可能已经正确设置了库,因为你需要它们用于busybox。我首先进行了busybox的静态构建,以确保我可以让系统启动到shell,然后使用工具链rootfs文件夹中的库进行非静态构建以便为库提供软启动。一旦我将一个动态链接的busybox系统工作,只需将交叉编译的工具链放到你的rootfs中的任意位置(对我来说/usr/home/toolchain)就足够了,之后你应该使用与x86系统相同的工具链引用路径和符号链接以及你想做的任何事情。