我建议使用最新的用于 x86 的Linaro 工具链:过去我在使用主流 Debian/Ubuntu 提供的 ARM 交叉编译器时遇到过一些问题。
使用以下 stdint.c 示例:
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
printf("The size of an uint32_t is %d.\n", sizeof(uint32_t));
return EXIT_SUCCESS;
}
mkdir -p /opt/linaro
wget https://releases.linaro.org/components/toolchain/binaries/latest/aarch64-linux-gnu/gcc-linaro-7.2.1-2017.11-i686_aarch64-linux-gnu.tar.xz
tar Jxvf gcc-linaro-7.2.1-2017.11-i686_aarch64-linux-gnu.tar.xz -C /opt/linaro
/opt/linaro/gcc-linaro-7.2.1-2017.11-i686_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc -o stdint stdint.c
编译应该会成功,你应该得到一个工作的 AARCH64 可执行文件:
readelf -h stdint
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: AArch64
Version: 0x1
Entry point address: 0x4003f0
Start of program headers: 64 (bytes into file)
Start of section headers: 4872008 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 6
Size of section headers: 64 (bytes)
Number of section headers: 37
Section header string table index: 36
如果您有一台 x86_64 开发 PC,当然最好使用 Linaro 工具链的x86_64 版本。