【发布时间】:2014-08-27 17:18:54
【问题描述】:
我遇到了一个我遇到过的最奇怪的问题。我正在为带有板载 Linux 的 ARM CPU 交叉编译一个应用程序。我正在使用 buildroot,一切顺利,直到我尝试在目标上运行应用程序:我得到了-sh: ./hw: not found。例如:
$ cat /tmp/test.cpp
#include <cstdio>
#include <vector>
int main(int argc, char** argv){
printf("Hello Kitty!\n");
return 0;
}
$ ./arm-linux-g++ -march=armv7-a /tmp/test.cpp -o /tftpboot/hw
将可执行文件加载到目标;然后在目标上发出:
# ./hw
-sh: ./hw: Permission denied
# chmod +x ./hw
# ./hw
-sh: ./hw: not found
# ls -l ./hw
-rwxr-xr-x 1 root root 6103 Jan 1 03:40 ./hw
还有更多:使用发行版编译器构建后,例如 arm-linux-gnueabi-g++ -march=armv7-a /tmp/test.cpp -o /tftpboot/hw,应用运行良好!
我通过readelf -a -W /tftpboot/hw 比较了可执行文件,但没有发现太多差异。我pasted both outputs here。我唯一注意到的是行Version5 EABI, soft-float ABI 与Version5 EABI。我尝试通过传递-mfloat-abi=softfp 和-mfloat-abi=soft 来消除差异,但编译器似乎忽略了它。不过我想,这并不重要,因为编译器甚至不会发出警告。
我还认为,如果可执行文件在某些方面不兼容,也许 sh 会输出此错误。但在我的主机 PC 上,我在这种情况下看到另一个错误,例如:
$ sh /tftpboot/hw
/tftpboot/hw: 1: /tftpboot/hw: Syntax error: word unexpected (expecting ")")
【问题讨论】:
标签: c++ linux arm sh buildroot