如何为ARM交叉编译?

haz*_*ziz 52 compiling gcc arm raspberrypi

如何为 ARM 处理器设置 GCC 以进行交叉编译?主机将在 x86_64 ( AMD64 - Ubuntu 12.04 ) 上,目标将是 ARM (Raspberry Pi 以及 Pandaboard - 将为每个单独编译)?

Mar*_*cza 53

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

你需要小心你的目标系统上有什么风格的 linux 和 binutils。最新的东西是hardfloat,在这种情况下你会这样做:

sudo apt-get install gcc-arm-linux-gnueabihf
Run Code Online (Sandbox Code Playgroud)

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

要在构建过程中使用此 GCC,请编写:

CC=arm-linux-gnueabihf-gcc make
Run Code Online (Sandbox Code Playgroud)

  • @Momergil `CC=arm-linux-gnueabihf-gcc make ...` (10认同)

Cir*_*郝海东 8

64 位 ARM

对于 64 位 ARM,工具链前缀是aarch64,用法是:

sudo apt install gcc-9-aarch64-linux-gnu
aarch64-linux-gnu-gcc -o main.out main.c
Run Code Online (Sandbox Code Playgroud)

您可以使用 QEMU 在这个 C hello world 上尝试一下:

主文件

#include <stdio.h>

int main(void) {
    puts("hello");
}
Run Code Online (Sandbox Code Playgroud)

进而:

sudo apt install qemu-user
qemu-aarch64 main.out
Run Code Online (Sandbox Code Playgroud)

将输出:

hello
Run Code Online (Sandbox Code Playgroud)

然后,您可以做一些有趣的事情来快速了解 ARM 实际在后台运行:

在 Ubuntu 19.10 中测试。

为了在严重应用程序中的可靠性,磁盘映像提供程序还必须提供兼容的交叉编译器

尽管您可以apt方便地安装交叉编译器,但我必须警告您,除非图像提供者明确支持,否则这不一定可靠。

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

树莓派交叉编译

特别是对于 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
Run Code Online (Sandbox Code Playgroud)

Ubuntu交叉编译

如果你想为 Ubuntu arm64 进行交叉编译,我一直找不到明确的参考资料,说明哪些交叉编译器支持哪个发行版:官方支持的 ARM 等 Ubuntu 服务器替代架构的交叉编译器是什么?

构建根

我最喜欢的替代方法是使用 Buildroot 构建自己的映像:https ://stackoverflow.com/questions/47557262/how-to-download-the-torvalds-linux-kernel-master-recompile-it-and-boot-it- wi/49349237#49349237

这将从源代码构建所有内容,包括工具链和图像,并确保所有内容都兼容。