![无法在 64 位 Ubuntu 上运行 32 位动态可执行文件](https://linux22.com/image/1390394/%E6%97%A0%E6%B3%95%E5%9C%A8%2064%20%E4%BD%8D%20Ubuntu%20%E4%B8%8A%E8%BF%90%E8%A1%8C%2032%20%E4%BD%8D%E5%8A%A8%E6%80%81%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6.png)
顺便说一下,我今天花了将近 6 个小时来处理这个问题。我已经用尽了 Google 和 Stack Overflow/Superuser 以及其他各种邮件列表上的其他类似问题。
我正在尝试运行以下应用程序:
# file ./ncsvc
./ncsvc: setuid setgid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.2.5, stripped
# ls -la ncsvc
-rws--s--x 1 root root 1931688 Dec 19 20:41 ncsvc
我正在运行 64 位版本的 Ubuntu:
# uname -m
x86_64
现在,我们已经了解了这些,下面是该应用程序所需的库的一些详细信息:
# readelf -a ./ncsvc | grep interpreter
[Requesting program interpreter: /lib/ld-linux.so.2]
# readelf -a ./ncsvc | grep NEEDED
0x00000001 (NEEDED) Shared library: [libdl.so.2]
0x00000001 (NEEDED) Shared library: [libz.so.1]
0x00000001 (NEEDED) Shared library: [libpthread.so.0]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]
这就是我陷入困境的地方:
# ls -la /lib/ld-linux.so.2
lrwxrwxrwx 1 root root 32 Dec 19 23:31 /lib/ld-linux.so.2 -> /lib/x86_64-linux-gnu/ld-2.15.so
# locate libdl.so.2
/lib/i386-linux-gnu/libdl.so.2
/lib/x86_64-linux-gnu/libdl.so.2
# locate libz.so.1
/lib/i386-linux-gnu/libz.so.1
/lib/i386-linux-gnu/libz.so.1.2.3.4
/lib/x86_64-linux-gnu/libz.so.1
/lib/x86_64-linux-gnu/libz.so.1.2.3.4
# locate libpthread.so.0
/lib/i386-linux-gnu/libpthread.so.0
/lib/x86_64-linux-gnu/libpthread.so.0
# locate libm.so.6
/lib/i386-linux-gnu/libm.so.6
/lib/x86_64-linux-gnu/libm.so.6
# locate libc.so.6
/lib/i386-linux-gnu/libc.so.6
/lib/x86_64-linux-gnu/libc.so.6
据我所知,我有动态链接器和运行它所需的所有共享库(tl;dr:ia32-libs 已安装)。但当我运行它时,我收到此错误。
# ./ncsvc
bash: ./ncsvc: cannot execute binary file
最后,我不确定这是否有任何帮助。
# ldd -v ./ncsvc
not a dynamic executable
答案1
内核不支持 32 位仿真。重新启动并选择支持该仿真的内核即可解决此问题。