我在Ubuntu 9.10 x86_64上安装了一个二进制Linux应用程序.该应用程序附带了旧版本的gzip(1.2.4),该版本是为更老的内核编译的:
$ file gzip
gzip: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.0.0, stripped
Run Code Online (Sandbox Code Playgroud)
我无法执行此程序.如果我试过,这发生了:
$ ./gzip
-bash: ./gzip: No such file or directory
Run Code Online (Sandbox Code Playgroud)
ldd对这个二进制文件同样不满意:
$ ldd gzip
not a dynamic executable
Run Code Online (Sandbox Code Playgroud)
我很好奇:这个问题的最可能来源是什么?一个损坏的文件?或者由于为更老的{kernel,libc,...}而构建的二进制不兼容性?
每个人的建议,这里的输出strace ./gzip:
execve("./gzip", ["./gzip"], [/* 24 vars */]) = -1 ENOENT (No such file or directory)
dup(2) = 3
fcntl(3, F_GETFL) = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 10), ...}) = 0
mmap(NULL, 4096, …Run Code Online (Sandbox Code Playgroud) 我想使用arm-linux-gnueabi-gcc从C构建静态hello世界,而不是使用NDK独立工具链或代码源.
在Ubuntu ......
我做了以下事情:
sudo apt-get install gcc-arm-linux-gnueabi
Run Code Online (Sandbox Code Playgroud)
我创建了一个像这样的hi.c:
#include <stdio.h>
int main(int argc, char** argv) {
printf("hello world\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我编译它像这样:
arm-linux-gnueabi-gcc -static hi.c -o hi
Run Code Online (Sandbox Code Playgroud)
我在这样的模拟器上运行它:
adb push hi /data/hi
adb shell /data/hi
Run Code Online (Sandbox Code Playgroud)
但是,我得到了这个:
[1] Illegal instruction /data/hi
Run Code Online (Sandbox Code Playgroud)
我忘记了什么步骤?根据过去的经验,这"应该"有效,但我显然搞砸了.