如何在Crosstools-NG中使用candian以跨越本土的方式在arm板上使用gcc?
据我所知,要在armv5板上使用gcc编译可执行文件,同时使用我的x86机器编译该臂本机gcc,我需要这个设置:
- 配置工具链组件的机器:配置机器:x86_64
- 机器构建工具链组件:构建机器:x86_64
- 运行工具链的机器:主机:ARM
- 机器工具链正在生成以下代码:目标机器:ARM
基于阅读这里的交叉文档,我应该使用跨本机设置,但是当我尝试使用ct-ng menuconfig
启用它时,我需要启用:
-
Paths and misc options -> Try features marked as EXPERIMENTAL
实验Paths and misc options -> Try features marked as EXPERIMENTAL
-
Toolchain options -> Type (Cross) -> Cross-native (NO CODE!) (EXPERIMENTAL)
但当然Cross-Native不起作用,因为它没有代码。 谷歌搜索带我到这个和这个讨论在邮件列表上说我应该尝试使用加拿大的构建样式,但我有点迷失了什么元组和什么用于Build System
和Host System
在crosstool-ng的menuconfig ,或者如果这仍然是考虑两个讨论如何超过3年的正确方法。
关于SO的post似乎暗示构建系统和主机系统元组应该是arm-unknown-linux-gnueabi
?
为了清楚起见,我已经能够使用crosstool-ng生成的交叉编译器编译和运行可执行文件,现在我想在armv5系统上安装编译器。
编辑 :所以我刚刚将crosstools-ng生成的普通交叉编译器( arm-unknown-linux-gnueabi
)添加到Toolchain options -> General toolchain options -> Host system -> Tuple
的元组Toolchain options -> General toolchain options -> Host system -> Tuple
并且能够编译gcc因为它在arm上执行。 例
我现在只需要修复库情况,应该是这样。
这个答案是我关于交叉编译工具链的一般工作流程的原始问题的扩展。
我有正确的总体思路,你必须做一个Canadian-Build
,主机系统元组是我之前制作的arm-unknown-linux-gnueabi
交叉编译器。 确保将它包含在您的路径中或对/ bin进行一些符号链接,或者您想要处理它。
在使用普通硬盘驱动器的Ubuntu Vmware虚拟机中使用3/4内核I5-3570k和~2GB内存进行构建时,我不得不等待大约30分钟。 使用SSD可能会显着提高速度。
完成此操作后,您应该拥有Crosstools-NG为您制作的输出目录,其中包含ARM架构的工具链。 您可以通过在任何二进制file filename
上运行file filename
来validation这一点。
现在,对于图书馆的情况,我花了一段时间,并给了一点点混乱。 在工具链输出中应该有一个rootfs文件夹。 该文件夹包含您要编译的目标的预期根文件系统(在本例中为arm)。 您需要从用户复制/lib
文件夹和lib,镜像此rootfs文件夹的文件夹层次结构。
您可以通过执行objdump -p filename
并查看指向所需库的NEEDED
条目来validation是否已设置库,这些条目应位于rootfs中。
如果您使用基于busybox的rootfs,那么假设您没有静态编译它,那么您可能已经正确设置了库,因为您需要它们用于busybox。 我首先进行了busybox的静态构建,以确保我可以让系统启动到shell,然后使用工具链rootfs文件夹中的库进行非静态构建以便为库提供软启动。 一旦我有一个动态链接的busybox系统工作,只需将交叉编译的工具链放入你的rootfs任意位置( /usr/home/toolchain
对我来说)应该足够了,之后你应该使用与x86相同的工具链系统引用路径和符号链接以及您想要做的任何事情。