C ARM交叉编译:错误未找到此类文件或目录/命令
我已经编写了简单的Hello world程序,并使用C ARM交叉编译:错误未找到此类文件或目录/命令,c,linux,gcc,arm,cross-compiling,C,Linux,Gcc,Arm,Cross Compiling,我已经编写了简单的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
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;
}
编译为
armlinuxgnueabigcc-Wall-ocroscomphello.c
当我在目标ARM上执行这个crosscomp时,机器错误是crosscomp没有这样的文件或目录
编辑当我使用arm linux gnueabi gcc时,入口点与目标机器入口点(readelf-l crosscom)不匹配,但当我使用与目标机器匹配的AARC64 linux gnu gcc入口点编译时。但现在错误变成了对./crosscomp的权限被拒绝。我试过sudo,上面写着crosscomp:没有这样的命令
注意我在askubuntu上发布了相同的问题,但没有得到回应
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
)目标arm机器上需要存在以“程序解释器:”命名的文件。如果您不知道从何处获取它,请发布上述命令的输出+ls-l
,该目录中应该有丢失的文件。ls-l crosscomp的输出是什么?好的,简而言之,这个错误是因为工具链不是针对目标ARM处理器的,您需要使用与编译目标板的rootfs完全相同的工具链。谢谢Gaurav。任何关于发现工具链的建议,您都可以参考本文。从目标rootfs上的任何二进制文件,可能是busybox。如果未删除注释,请参考供应商网站。它应该有工具链或BSP下载链接。你能告诉我,你从哪里得到这个板的BSP,或者你是如何编译它的文件系统的吗?谢谢zwol,我已经确认了目标机器的入口点和加载程序是相同的/准确的。当我搜索crosscomp时,第二个系统调用被写入,字符串权限被拒绝,尽管它正在打印未找到的命令。我很难过stuck@shami你能把完整的未经编辑的strace输出复制粘贴到问题中吗?还有ls-l./crosscomp
的输出和readelf-e./crosscomp
的输出。谢谢,我可以在Monday@shami还有一件事;这是一个不太可能出现的愚蠢问题,但为了确保,请执行chmod+x./crosscomp
,然后再次尝试运行它。文件标志为-rwxr-x 1 readelf具有很长的输出。怎么补充呢?