我有点困惑,因为我不明白为什么会发生这种情况:
我记得系统上的最后变化是
- 为旧项目安装了 g++5(已被删除)
- 自动清理
- 已删除ldconfig 缓存(猜测是这个原因)
现在我无法启动某些应用程序。ldd 告诉我它“不是动态可执行文件”
igor@Linbox:/lib/i386-linux-gnu$ ldd libssl.so.1.0.0
is not a dynamic executable
igor@Linbox:/lib/i386-linux-gnu$ ldd libselinux.so.1
is not a dynamic executable
igor@Linbox:/bin$ ldd dd
linux-vdso.so.1 => (0x00007fff0b380000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb618c76000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb619269000)
igor@Linbox:/lib/x86_64-linux-gnu$ ldd libc.so.6
/lib64/ld-linux-x86-64.so.2 (0x00007fcb44373000)
linux-vdso.so.1 => (0x00007ffed8f33000)
版本:Linux Linbox 4.13.0-46-generic #51-Ubuntu SMP Tue Jun 12 12:36:29 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
我还检查了它是否仍然存在:
// for running x32 applications on x64 system
sudo dpkg --add-architecture i386
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
自从删除后,ld.so.cache
我做到了sudo ldconfig
。有新的缓存/etc/ld.so.cache
我是否错过了一些图书馆?
添加文件检查:
file /lib/i386-linux-gnu/libssl.so.1.0.0
/lib/i386-linux-gnu/libssl.so.1.0.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=c1e3854cb8b86f1006dc391d23f102ea1184cf25, stripped
file /lib/i386-linux-gnu/libselinux.so.1
/lib/i386-linux-gnu/libselinux.so.1: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=396cda857e41036061599a59c9f5fe62d7b50c4d, stripped
dpkg -S /lib/i386-linux-gnu/libssl.so.1.0.0
libssl1.0.0:i386: /lib/i386-linux-gnu/libssl.so.1.0.0
dpkg -S /lib/i386-linux-gnu/libselinux.so.1
libselinux1:i386: /lib/i386-linux-gnu/libselinux.so.1
从评论中检查了 libx32:
igor@Linbox:/lib/i386-linux-gnu$ ls -l /libx32/ld*
-rwxr-xr-x 1 root root 155092 Jan 12 2018 /libx32/ld-2.26.so
lrwxrwxrwx 1 root root 10 Jan 12 2018 /libx32/ld-linux-x32.so.2 -> ld-2.26.so
答案1
Bug 1616609,当可执行文件的加载器不存在时,ldd 错误地报告“不是动态可执行文件”,这可能是问题的原因(正如steeldriver 所建议的那样)。重新安装 libc6-x32 包以恢复它。请考虑将自己添加到错误中,也许有一天它会被修复——甚至建议使用补丁。
答案2
所以这对我有用。ldd 是一个脚本。在顶部附近(我的 arm Debian 10 上的第 29 行),它基于 RTLDLIST=/lib/ld-linux-aarch64.so.1 进行所有库搜索。在安装 arm 32 位库(dpkg --add-architecture armhf;apt update;等)后,我查看了 /lib 并看到 ld-linux-armhf.so.3 紧挨着 ld-linux-aarch64.so.1。因此这停止了 ldd 说“不是动态可执行文件”:
- 将 /usr/bin/ldd 复制到 /usr/bin/ldd32
- 编辑 /usr/bin/ldd32
- 用 RTLDLIST=/lib/ld-linux-armhf.so.3 替换 RTLDLIST=/lib/ld-linux-aarch64.so.1
- ldd32 <32 位二进制>
答案3
4.13.0-46-generic
我已经通过将内核从以下版本更新至以下版本解决了该问题(感谢 ubfan1)4.15.0-39-generic
:
$ uname -a
Linux Linbox 4.15.0-39-generic #42-Ubuntu SMP Tue Oct 23 15:48:01 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.1 LTS
Release: 18.04
Codename: bionic
/lib/i386-linux-gnu$ ldd libselinux.so.1
linux-gate.so.1 (0xf7fca000)
libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xf7ee6000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf7ee1000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7d05000)
/lib/ld-linux.so.2 (0xf7fcc000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7ce6000)
答案4
扩展这里的一些其他答案——所有类型的不兼容架构都会导致此错误,而不仅仅是位大小。在 x86_64 设备上
尝试ldd
ARM 或 AARCH 也会遇到同样的问题。
(情况可能并非如此,因为 OP 表示应用程序曾经运行过,但对于在谷歌搜索错误消息时到达此页面的其他人来说,情况可能如此)
尝试运行$file my.so
并确认 so 文件适合您的设备!