交叉编译二进制文件不存在?

时间:2013-02-10 16:16:26

标签: c linux gcc arm cross-compiling

我使用gcc-arm-linux-gnueabibinutils-arm-linux-gnueabi在x86上运行的Ubuntu 12.04上编译了一个程序,并使用arm-linux-gnueabi-gcc而不是gcc进行编译,我的目标架构是ARM。它编译得很好,没有任何错误或警告。

当我尝试在ARM机器上运行它时(Pandaboard - 也运行Ubuntu 12.04)我得到:

bash: ./sttyl: No such file or directory

我知道文件在那里并且它具有适当的权限:

-rwxrwxr-x 1 haziz haziz 8.5K Feb 10 10:34 sttyl

file sttyl的输出是

sttyl: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.31,BuildID[sha1]=0x6d504f7d84b93603122223a89e2b5960c840309f, not stripped

当我在Pandaboard上本地编译它时,它编译并运行正常。这是本机编译副本上file sttyl的输出:

sttyl: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.31,BuildID[sha1]=0x9897c785266c5b7cdf580e08091aba239db84ecf, not stripped

我做错了什么?此外,如果我在交叉编译中犯了一个错误,我会期望shell /内核有效地告诉我可执行文件是错误的架构而不是它不存在!

1 个答案:

答案 0 :(得分:1)

没有告诉你./sttyl不存在。

它告诉你它产生了一个新进程,退出时出现错误No such file or directory。没有提供有关缺少哪个文件或目录的信息。

例如,如果缺少解释器#!/bin/specialsh,则以/bin/specialsh开头的shell脚本可能会生成该错误,即使该脚本存在且可执行。

尝试使用strace找出导致错误的调用(和路径)。