【问题标题】:Can't cross-compile C program for Raspberry Pi无法为 Raspberry Pi 交叉编译 C 程序
【发布时间】:2021-09-12 20:59:08
【问题描述】:

我正在尝试使用 crostool-ng 为我的 Raspberry Pi 3b+ 交叉编译 C 代码。我正在使用 M1 芯片 Mac 并尝试在 Ubuntu 虚拟机(Parallels)中交叉编译我的代码。 我使用buildroot 编译了我自己的内核,并使用crostool-ng. x-tools 创建了一个工具链,这是我在//home/parallels/x-tools 创建的工具链,我正在尝试交叉编译一个简单的代码只是打印 Hello World 位于我的桌面。我试过arm-unknown-linux-gnueabi-gcc -o deneme test.c 并得到了这个:deneme: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 5.12.12, with debug_info, not stripped 文件。如果我将它发送到我的目标 rasppi 并尝试使用./deneme 运行它,我会收到此错误:-sh: ./deneme: not found 。我确定它们在同一个目录中。现在,我正在使用aarch64,但我尝试使用armv71,但它也不起作用。如果这还不够,请询问更多信息。

我的树莓派型号:3b+。

主机:Mac m1芯片。

Raspberry Pİ ARM:AArch 64 (Little Endian)

Crosstool-ng 工具链选项:

目标架构:ARM

字节序:小字节序

位数:32

操作系统:Linux

【问题讨论】:

  • 二进制文件deneme是否有执行权限?
  • 你的目标机器有/lib/ld-linux.so.3吗?

标签: c linux raspberry-pi arm cross-compiling


【解决方案1】:

好的,我找到了解决方案。就像我说的,如果我运行这个命令:arm-unknown-linux-gnueabi-gcc -o deneme test.c 我得到这个文件deneme: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 5.12.12, with debug_info, not stripped,你可以看到这个文件是动态链接的。我们需要添加-static这样我们才能静态链接。最终的解决方案是:arm-unknown-linux-gnueabi-gcc -static -o deneme test.c

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多