如何为ARM交叉编译?


41

如何设置GCC以用于ARM处理器的交叉编译?主机将位于x86_64(AMD64-Ubuntu 12.04)上,目标将是ARM(Raspberry Pi以及Pandaboard-会分别为每个编译)?

Answers:


44

安装gcc-arm-linux-gnueabibinutils-arm-linux-gnueabi打包,然后仅使用arm-linux-gnueabi-gcc而不是gcc进行编译。

您需要注意目标系统上的Linux和binutils风格。最新的东西是hardfloat,在这种情况下,您可以这样做:

sudo apt-get install gcc-arm-linux-gnueabihf

这带来了完整的交叉编译环境,包括binutils。


在Ubuntu 13.10上,您可以使用gcc-4.7的“ gnueabi”和gcc-4.8的“ gnueabihf”。
nobar 2014年

当我尝试编译时,openssl/ossl_typ.h虽然已经安装,但没有发现错误libssl-dev
Necktwi 2014年

1
如果您从中获取源代码apt-get sourceapt-get build-dep则通常可以使用编译之后。dpkg-buildpackage -b -uc -us -r是否有一种方法可以在不更改makefile的情况下为ARM轻松构建.deb?
乔纳森

@Maratyszcza您能否更详细地说明行的执行and then just use arm-linux-gnueabi-gcc instead of gcc for compilation?编译时,我会使用makeAFAIK自然指向/usr/lib/gcc或接近的调用。如何直接调用arm-linux-gnueabi-gcc?
Momergil

9
@MomergilCC=arm-linux-gnueabihf-gcc make ...
Maratyszcza 2015年

1

磁盘映像提供程序还必须提供兼容的交叉编译器

这是唯一可靠的方法。

特别是对于RPI,提供的交叉编译器位于:https : //github.com/raspberrypi/tools,并且可以按以下说明使用:https : //raspberrypi.stackexchange.com/questions/64273/installing-raspberry- pi-cross-compiler / 83215#83215

git clone https://github.com/raspberrypi/tools
export PATH="$(pwd)/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:${PATH}"
printf '#include <stdio.h>\nint main() { puts("hello world"); }\n' > hello_world.c
printf '#include <iostream>\nint main() { std::cout << "hello world" << std::endl; }\n' > hello_world.cpp
arm-linux-gnueabihf-gcc -std=c99 -o hello_world_c hello_world.c
arm-linux-gnueabihf-g++ -std=c++11 -o hello_world_cpp hello_world.cpp

如果您错误地选择了自己的交叉编译器,则可能会发生以下情况:

我最喜欢的替代方法是使用Buildroot构建自己的映像:https ://stackoverflow.com/questions/47557262/how-to-download-the-torvalds-linux-kernel-master-recompile-it-and-boot-it- wi / 49349237#49349237这样可以从源代码构建所有内容,并确保所有内容兼容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.