【问题标题】:Non-tedious way to cross-compile third-party libs for Raspberry Pi为 Raspberry Pi 交叉编译第三方库的非繁琐方法
【发布时间】:2012-11-19 17:46:37
【问题描述】:

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

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

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

【问题讨论】:

  • 您是否尝试过在 raspi 本身上构建?不需要那样交叉编译
  • @dwelch 我说的是-乏味的。 :) 在树莓上编译类似 Boost 的东西会很糟糕,我想。
  • 只是想提供帮助,如果那是您的目标,您仍然可以尝试。或者在您的应用程序中不要有太多依赖项,让它们更便携。
  • 不管怎样,我在 Raspberry Pi Model B(超频至 900 MHz)上编译了 GStreamer(我认为)不到一个小时。我还编译了ICU。那很糟糕 - 可能需要 4 个多小时,但没过几天。我选择了“编译并稍后检查”的简单性,而不是使用我也设置的 crosstools-ng 环境。 :)

标签: ubuntu cross-compiling raspberry-pi


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    Here 是使用 openembedded 和 raspberry-pi 的指南

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 2020-11-16
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      相关资源
      最近更新 更多