如何处理根本不执行的可执行文件?

如何处理根本不执行的可执行文件?

我下载了 Linux 可执行文件启动 494,现在我正在尝试运行它。作为 root,我使其可执行并尝试执行它:

chmod +x unetbootin-linux-494
./unetbootin-linux-494

什么也没有发生,也没有显示任何输出。ps -e | grep unetbootin也没有显示任何内容。该文件的大小看起来正确(4.3 MB),尽管我在 sourceforge 上没有看到用于验证它的校验和。我在我的分区上运行它/home(尽管以 root 身份运行),因此文件系统不是不可执行的。

我怎样才能执行这个文件,或者至少进一步调试问题?我使用的是 Debian x64。

答案1

简短回答:

安装ia32-libsia32-libs-gtk应该解决问题。这个问题非常基本:在没有适当库的情况下,在 64 位系统上运行 32 位可执行文件是行不通的。

更长的答案:

我最初的帖子可能太仓促了,但由于我在找到解决方案时遇到了一些困难,所以我不妨回答一下。我跑了strace ./unetbootin-linux-494,它告诉我:

execve("./unetbootin-linux-494", ["./unetbootin-linux-494"], [/* 33 vars */]) = 0
[ Process PID=5369 runs in 32 bit mode. ]
old_mmap(0x1020000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0x1020000) = 0x1020000
readlink("/proc/self/exe", "/home/jb/Downloads/unetbootin-linux-494", 4096) = 43
old_mmap(0x8048000, 10891295, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x8048000
mprotect(0x8048000, 10891292, PROT_READ|PROT_EXEC) = 0
old_mmap(0x8aac000, 124071, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0xa63000) = 0x8aac000
mprotect(0x8aac000, 124068, PROT_READ|PROT_WRITE) = 0
old_mmap(0x8acb000, 4436, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x8acb000
brk(0x8acd000)                          = 0x8bfc000
open("/lib/ld-linux.so.2", O_RDONLY)    = -1 ENOENT (No such file or directory)
_exit(127)    = ?

显然,问题是该ld-linux.so.2对象在我的系统上不存在。由于该对象是 的一部分ia32-libs,因此我安装了该包。然而,这还不够,因为我收到了这个错误:

unetbootin-linux-494: error while loading shared libraries: libgthread-2.0.so.0: cannot open shared object file: No such
file or directory

根据这个错误报告但是,问题是因为ia32-libs-gtk还需要安装该软件包。一旦我安装了它,可执行文件就可以正常运行。

相关内容