我使用的是 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,有两种方法可以实现这一点:
使用
pbuilder
或sbuild
在架构的 chroot 中编译armhf
。这(通常)要求您有 Debian 打包要编译的内容。但是,您也可以(至少在 中sbuild
)启动 chroot 的实例,使用apt-get
获取所需的库,然后在其中编译程序。pbuider
通常更容易设置。充分利用多架构并
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 update
和sudo apt-get install libboost-system1.53.0:armhf
(或其他以 为后缀的 Boost 包:armhf
)。这将允许您armhf
在 下安装系统上的库/usr/lib/aarch64-linux-gnu
。
请注意,上述第二种方法仅适用于多架构库,Ubuntu repo 中的大多数库都应如此。您可能还想在 chrooted 环境中使用第二种方法,以防止弄乱您的系统(请参阅这里对于使用 Precise 的指令,它不支持多架构)。