5

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

我正在运行 Ubuntu 12.04,并使用 crosstools-ng 构建了我的 GCC 4.7 交叉编译器(后来才意识到我可以通过使用官方提供的工具链为自己省去麻烦!)我能够为我的覆盆子。到现在为止还挺好。

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

4

2 回答 2

3

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

结果是,一旦我完成了所有设置——并且设置它需要几个乏味的小时——我能够简单地输入sb2 -eR apt-get install ...以获得任何所需的 ARM 包。这是神奇的东西。(警告:我对 Ubuntu 12.10 中的官方 ScratchBox2 包没有运气,所以最好从源代码自己构建它,使用官方 Git repo的最新版本。)

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

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

于 2012-12-09T08:45:38.880 回答
2

查看openembedded 构建框架。它旨在自动化交叉编译的所有繁琐任务。

openembedded 项目增加了对 raspberry -pi 目标的支持

您可以使用像pokyangstrom这样的开放嵌入式发行版 sdk进行设置并帮助您入门。

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

是使用带有 raspberry-pi 的 openembedded 的指南

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

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

于 2012-12-01T21:08:46.723 回答