![如何处理根本不执行的可执行文件?](https://linux22.com/image/30225/%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86%E6%A0%B9%E6%9C%AC%E4%B8%8D%E6%89%A7%E8%A1%8C%E7%9A%84%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我下载了 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-libs
并ia32-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
还需要安装该软件包。一旦我安装了它,可执行文件就可以正常运行。