交叉编译为ARM:错误没有找到这样的文件或目录/命令
我编写了简单的Hello World程序,并使用gcc-arm-linux-gnueabi
编译器进行编译。 它编译得很好,但是当我尝试在ARM机器上执行它时,它抱怨“没有这样的文件或目录”。 我认为gcc-arm-linux-gnueabi
仅适用于嵌入式Linux,因为e(mbedded)abi。 它与ARM Linux ABI不同吗?
请帮我解决这个问题
代码在这里
#include "stdio.h"
int main(void) {
printf("Hello world !n");
return 0;
}
编译为
arm-linux-gnueabi-gcc -Wall -o crosscomp hello.c
当我在目标上执行这个crosscomp时,ARM机器错误是crosscomp没有这样的文件或目录
编辑当我使用arm-linux-gnueabi-gcc时,入口点与目标机器入口点(readelf -l crosscom)不匹配,但是当我使用与目标机器匹配的aarch64-linux-gnu-gcc入口点进行编译时。 但是现在错误变成了./crosscomp上的权限被拒绝。 我用sudo说crosscomp:没有这样的命令。
注意我在askubuntu上发布了同样的问题https://askubuntu.com/questions/904685/cross-compilation-for-arm-error-no-such-file-or-directory,但没有得到任何回应。
readelf的输出如下
ELF标题:
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: 0x400470
Start of program headers: 64 (bytes into file)
Start of section headers: 4488 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 8
Size of section headers: 64 (bytes)
Number of section headers: 29
Section header string table index: 26
当特定可执行文件所需的动态加载程序缺失时,会发生此特殊错误消息。
通过将readelf
应用于问题可执行文件,您可以找到所需的动态加载器的名称。 例如,在我的x86-64 Linux机器上
$ readelf -l /bin/ls | grep 'program interpreter'
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
(“程序解释器”是“动态装载器”的另一个名称。)
因此,在您的开发框中对您的crosscomp
二进制文件运行上述命令。 (如果您没有readelf
或者您收到错误消息,请尝试arm-linux-gnueabi-readelf
。)以“program interpreter:”命名的文件需要存在于目标ARM计算机上。 如果你不知道从哪里得到它,请将上面命令的输出+ ls -l
放在应该丢失文件的目录中。
上一篇: cross compilation for ARM: error no such file or directory/command not found
下一篇: Why doesn't arm