【发布时间】:2012-01-26 11:05:33
【问题描述】:
我在下面准备了一个示例 C 代码,按照这些步骤使其在 Android 操作系统上运行,
/*test.c file*/
#include <stdio.h>
int
main(int argc, char **argv)
{
printf("Android Test Application.\n");
return 0;
}
$ arm-none-linux-gnueabi-gcc -o test test.c -Wall
我将二进制文件--test--复制到目标设备“/system/bin”目录中。
当我尝试在目标系统上运行交叉编译的二进制文件时,我收到了这个错误
$密码
/系统/bin
$ ./test
bash: ./test: 没有这样的文件或目录
$ ls -al | grep 测试
-rwxr-xr-x 1 0 0 8384 2011-12-22 15:26 测试
虽然二进制文件 --test-- 已经在“/system/bin”目录下。
我的交叉编译器是
$ arm-none-linux-gnueabi-gcc --version
arm-none-linux-gnueabi-gcc (Sourcery G++ Lite 2009q1-203) 4.3.3 版权所有 (C) 2008 Free Software Foundation, Inc. 这是免费的 软件;查看复制条件的来源。没有 保修单;甚至不适合适销性或适合特定的 目的。
为什么会出现这个错误?
bash: ./test: 没有这样的文件或目录
【问题讨论】:
-
可能是缺少/错误链接的动态加载器或类似的东西。通过
readelf了解加载程序是什么。在设备上尝试ldd ./test。还可以尝试静态链接 exe,看看是否至少有效。 -
在我的手机上运行
ls -al | grep date会产生lrwxrwxrwx作为权限。也许是权限问题? -
如何检测我当前的动态加载器?我可以使用 readelf 实用程序来学习吗?
标签: android cross-compiling elf