我在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) 我正在尝试使用Rust创建一个静态可执行文件.我不是试图静态链接特定的库,我试图创建一个根本不使用动态链接的可执行文件.我有以下(否则工作)测试:
$ cat hello.rs
fn main()
{
print!("Hello, world!\n");
}
$ rustc hello.rs -o hello
$ file hello
hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, [etc]
Run Code Online (Sandbox Code Playgroud)
请注意dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2.statically linked相反,静态可执行文件.(就我而言corrupted section header size,如果我能说服Rust复制那个,我会感到非常惊讶.)
我需要传递什么选项rustc才能使它生成一个实际的静态可执行文件(具体来说:一个甚至file同意静态链接的选项).