为Raspberry Pi交叉编译第三方库的非繁琐方法

时间:2012-12-01 20:12:43

标签: ubuntu cross-compiling raspberry-pi

我正在尝试将现有的Linux C ++应用程序移植到Raspberry Pi。该应用程序依赖于许多第三方库。

我正在运行Ubuntu 12.04,并使用crosstools-ng构建了我的GCC 4.7交叉编译器(后来意识到我可以通过使用官方提供的工具链来节省自己的麻烦!)我能够生产为我的Raspberry工作可执行文件。到目前为止一切都很好。

然后我开始尝试构建我的所有第三方库依赖项:GLib,SDL和其他几个。这些依赖项中的每一个都有自己的依赖关系等。很快就会发现,手动构建所有这些库的ARM版本将非常繁琐且耗时。有更简单的方法吗?

2 个答案:

答案 0 :(得分:3)

在发现ScratchBox2之后,我设法凑齐了一些可行的东西。 ScratchBox2是一个工具,可以帮助创建适合交叉编译的chroot并使用QEmu,允许您在计算机上运行外部CPU二进制文件。在我的例子中,ScratchBox2调解了对Raspbian的自包含沙箱的访问,Raspbian是Debian的ARM变种,针对Raspberry Pi进行了优化。

结果是,一旦我完成所有设置 - 并且设置它需要花费几个繁琐的时间 - 我只需输入sb2 -eR apt-get install ...即可获得任何所需的ARM包。这是神奇的东西。 (警告:我对Ubuntu 12.10中的官方ScratchBox2软件包没有好运,因此最好使用official Git repo的最新修订版自己从源代码构建它。)

为了帮助您更轻松地重现我的设置,我在Github上为我的虚拟机添加了一个Vagrant配方:https://github.com/nickhutchinson/raspberry-devbox。它几乎肯定是粗糙的 - 这是我第一次使用Puppet配置工具 - 但希望其他人可以使它更强大。

我发现这些资源非常有用:

答案 1 :(得分:2)

查看openembedded build framework。它旨在自动执行交叉编译的所有繁琐任务。

openembedded项目增加了对raspberry-pi target

的支持

您可以使用像pokyangstrom这样的openembedded发行版sdk进行设置并开始使用。

Poky可以吐出rpm,ipk,deb。他们中的大多数都会在其他发行版上工作。所以你不需要使用poky发行版本身。

Here是使用openembedded和raspberry-pi

的指南

之后,您可以创建一个bitbake配方或定义应用程序依赖关系的自定义oe层。请查看相关文档的poky手册。

有或没有openembedded的另一个选择是在qemu-arm机器上加载完整的开发环境并在生产映像上使用二进制文件。 Openemmbedded / poky有一个qemu-arm sdk图像的目标图像配方。