使用 libboost 为 ARM 架构进行交叉编译

使用 libboost 为 ARM 架构进行交叉编译

我使用的是 32 位 Ubuntu 系统,我的目标是为 arm 架构(beagleblack)编译我的 C++ 程序。但是,我的 C++ 程序需要 libboost,这意味着我在编译时会遇到如下错误:

/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lboost_system
-bash: /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld:: No such file or directory

在阅读了一些博客之后,我认为我必须自己为 ARM 编译 libboost。

问题: 我的假设正确吗?真的没有针对 ARM 的预编译 libboost 可用于g++-arm-linux-gnueabi在 Ubuntu 32 位下为 ARM 进行编译吗?

答案1

Ubuntu 确实有一个预编译的 Boost 库armhf(我假设 Beagleblack 可以使用armhf)。假设您将在 Beagleblack 上使用 Ubuntu,有两种方法可以实现这一点:

  1. 使用pbuildersbuild在架构的 chroot 中编译armhf。这(通常)要求您有 Debian 打包要编译的内容。但是,您也可以(至少在 中sbuild)启动 chroot 的实例,使用apt-get获取所需的库,然后在其中编译程序。pbuider通常更容易设置。

  2. 充分利用多架构并armhf在计算机上安装库,这样您就可以编译和使用现有库而无需使用 chroot。为此,运行sudo dpkg --add-architecture armhf,并编辑/etc/apt/sources.list以包含deb [arch=armel] http://ports.ubuntu.com/ubuntu-ports saucy main universe(如果您不使用 Saucy,请将其替换为适当的版本)。然后,运行sudo apt-get updatesudo apt-get install libboost-system1.53.0:armhf(或其他以 为后缀的 Boost 包:armhf)。这将允许您armhf在 下安装系统上的库/usr/lib/aarch64-linux-gnu

请注意,上述第二种方法仅适用于多架构库,Ubuntu repo 中的大多数库都应如此。您可能还想在 chrooted 环境中使用第二种方法,以防止弄乱您的系统(请参阅这里对于使用 Precise 的指令,它不支持多架构)。

相关内容