首页 文章

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

提问于
浏览
2

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

  • Host machine: Ubuntu 12.04 Intel x64

  • Target machine: Ubuntu 14.04 ARM 32位(类似于Raspberry-Pi的主板)

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

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

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

2 回答

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

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

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

  • 3

    在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
    
    • 如果没有打包,你需要安装build-dependencies,arch armhf库,本机arch的工具(通常是amd64或arm64) . 例如:
    apt-get install sgmltools ghostscript libpng-dev:armhf libssl-dev:armhf
    

    将安装本机 ghostscriptsgmltools (用于文档构建)和头文件/库为 libpnglibssl for armhf .

    更多细节on the Debian wiki .

相关问题