如何在Ubuntu 12.04 i386主机上交叉编译适用于Ubuntu 12.04 armhf架构的应用程序?


16

我已经编写了一个大型应用程序。我可以在以下情况下成功编译该应用程序:

  • 在运行Ubuntu 12.04的i386主机的本机编译中
  • 本机在运行Ubuntu 12.04的PandaBoard上(这需要很长时间)
  • 在主机PC上将Qemu和chroot用于armhf PandaBoard目标(这需要很长时间)

我想交叉编译i386主机上的应用程序,使其在诸如PandaBoard之类的目标上运行,以便及时完成构建。到目前为止,使用存储库中的arm-linux-gnueabihf工具链进行的尝试均导致二进制文件无法正常运行。在这个阶段,我还没有打包软件的计划。

推荐的成功交叉编译的方法是什么?


使用交叉编译器工具链进行交叉编译应该可以,这就是它的目的。二进制文件不能以哪种方式正确运行?
吉尔(Gillles)'所以

我的二进制文件几乎立即终止。strace似乎表明libc.so.6不在预期的位置。
乔纳森·凯夫

那应该可以通过链接选项解决(我不知道哪个是副手)。目标系统是否正在运行Ubuntu?
吉尔(Gilles)'所以

是的,目标也正在运行Ubuntu 12.04。我以为也许我需要在编译器和链接器中使用--sysroot选项,但是在Ubuntu工具链中禁用了该选项。
乔纳森·凯夫

工具链适用于我,适用于12.04。我刚刚在amd64上对其进行了测试,并成功运行了在armhf服务器上生成的二进制文件。但是我没有便携式的i386构建机器。如果仍然有问题,则需要详细说明。ldd说什么?您从strace中看到了什么,使您得出了结论?查看您是否可以将问题简化为一个简单的测试案例,该案例应该可以正常工作,并详细介绍您要采取的步骤。
罗比·巴萨克

Answers:


6

https://wiki.linaro.org/Platform/DevPlatform/CrossCompile/UsingMultiArch

https://wiki.ubuntu.com/MultiarchCross

Ubuntu具有跨工具链,apt-get install gcc-arm-linux-gnueabihf但此处讨论了下一代工具链的工作:http : //gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/

此时有许多变通办法是必需的。例如,如果您使用间接链接(在linaro Wiki页中找到。)您还应该避免在编译它们之后立即运行外部二进制文件。

另外,它真的是最成熟的自动工具。

我的包可以相当快速地交叉编译。

apt-get build-dep -aarmhf foo-pkg
apt-get source foo-pkg
cd foo-pkg-*
dpkg-buildpackage -aarmhf

3
请说明这些步骤的作用以及-aarmhf开关的作用。他们对许多用户并不熟悉,要求他们深入搜索另一层才能获得可用的答案。谢谢。
加里普
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.