How to cross-compile a autotools project for ARM?

喜夏-厌秋 提交于 2019-12-22 13:53:54

问题


I am looking to cross-compile an existing library which uses GNU autotools build system. I have a Linaro arm-gcc toolchain installed in my host machine and I am able to compile small programs directly using arm-gcc.

  • Host machine: Ubuntu 12.04 Intel x64
  • Target machine: Ubuntu 14.04 ARM 32-bit (a board similar to Raspberry-Pi)

I have a library source code which has configure.ac and Makefile.am files for it. I want to compile this code on host machine and generate ARM binaries which can be copied over to the target platform.

What is the canonical way to do this?

For specifics, I am looking for something that would work for a "Hello World" application/library in C cross-compiled using arm-linux-gnueabi-gcc and autotools.


回答1:


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

might be sufficient, as it will look for a corresponding ARM toolchain. Otherwise, try adding: CC="arm-linux-gnueabi-gcc"

You can also add: CFLAGS="-pipe -Wall -O2 ... <other arm-gcc flags>"
for better code optimization.




回答2:


The right way to do this on Ubuntu is to the use the distro-supplied cross-compiler, not a 3rd party one like Linaro. You only need an out-of-distro package when the distro one is not good enough for some reason (like you need some cutting-edge feature which is only in the Linaro toolchain and not yet in the distro). Hardly anyone needs to do that.

Install the gcc, g++ crosstollchains, a cross libc and some config tools with:

apt install crossbuild-essential-armhf

If the software you want to build needs nothing more than the C runtime library then you can build it as is. If it needs anything more then you need to install cross-build-dependencies.

  • If the software you want to build is packaged (and called $packagename), you should be able to:

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

    then build it with

    dpkg-buildpackage -aarmhf
    
  • If it's not packaged you'll need to install build-dependencies, libraries for arch armhf, tools for the native arch (usually amd64 or arm64). For example:

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

    would install native ghostscript and sgmltools (for doc-building) and headers/libraries for libpng and libssl for armhf.

More details on the Debian wiki.



来源:https://stackoverflow.com/questions/28205073/how-to-cross-compile-a-autotools-project-for-arm

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!