如何为ARM交叉编译autotools项目?

时间:2015-01-29 00:33:22

标签: linux arm cross-compiling gnu-make autotools

我希望交叉编译一个使用GNU autotools构建系统的现有库。我在我的主机上安装了一个Linaro arm-gcc工具链,我可以使用arm-gcc直接编译小程序。

  • 主机: Ubuntu 12.04 Intel x64
  • 目标计算机:Ubuntu 14.04 ARM 32位(类似于Raspberry-Pi的主板)

我有一个库源代码,它有configure.ac和Makefile.am文件。我想在主机上编译此代码并生成可以复制到目标平台的ARM二进制文件。

这样做的规范方法是什么?

具体来说,我正在寻找适用于使用arm-linux-gnueabi-gcc和autotools进行交叉编译的“Hello World”应用程序/库的东西。

2 个答案:

答案 0 :(得分:3)

--build=`./config.guess` --host=arm-linux-gnueabi

可能就足够了,因为它会寻找相应的ARM工具链。否则,请尝试添加:CC="arm-linux-gnueabi-gcc"

您还可以添加:CFLAGS="-pipe -Wall -O2 ... <other arm-gcc flags>"
为了更好的代码优化。

答案 1 :(得分:1)

在Ubuntu上执行此操作的正确方法是使用发行版提供的交叉编译器,而不是像Linaro那样的第三方编译器。当发行版由于某种原因不够好时,你只需要一个out-of-distro包(比如你需要一些只在Linaro工具链中而且还没有在发行版中的尖端功能)。几乎没有人需要这样做。

使用以下命令安装gcc,g ++ crosstollchains,cross libc和一些配置工具:

apt install crossbuild-essential-armhf

如果您要构建的软件只需要C运行时库,那么您可以按原样构建它。如果它需要更多,那么您需要安装跨构建依赖项。

  • 如果您要构建的软件已打包(并称为$packagename),您应该能够:

    dpkg --add-architecture armhf
    apt update
    apt build-dep $packagename
    

    然后用

    构建它
    dpkg-buildpackage -aarmhf
    
  • 如果没有打包,您需要安装构建依赖项,arch armhf库,本机arch(通常是amd64或arm64)工具。例如:

    apt-get install sgmltools ghostscript libpng-dev:armhf libssl-dev:armhf
    

    为armhf安装原始ghostscriptsgmltools(用于文档构建)和libpnglibssl的标头/库。

更多详情on the Debian wiki