【发布时间】:2025-12-29 23:40:07
【问题描述】:
我对 ldd 有以下奇怪之处
$ sudo ldd ./monit
not a dynamic executable
$ readelf -d monit
Dynamic section at offset 0x25ea90 contains 27 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libdl.so.2]
0x0000000000000001 (NEEDED) Shared library: [libm.so.6]
0x0000000000000001 (NEEDED) Shared library: [libpam.so.0]
0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
0x0000000000000001 (NEEDED) Shared library: [libcrypt.so.1]
0x0000000000000001 (NEEDED) Shared library: [libresolv.so.2]
0x0000000000000001 (NEEDED) Shared library: [libnsl.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
...
$ file ./monit
./monit: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.0, with debug_info, not stripped
$ uname -r -i -m
4.15.0-43-generic x86_64 x86_64
$ file $(which ls)
/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=9567f9a28e66f4d7ec4baf31cfbf68d0410f0ae6, stripped
其他二进制文件和库是针对更新的内核/系统编译的,ldd 成功报告了共享库,我想知道不同环境之间是否存在任何不兼容性,尽管二进制文件构建在相同的架构上.. 另一个愚蠢的问题是,如果某些共享库会像 libpam 一样升级,那么如果不插入旧库,二进制文件就有可能无法运行,api 是否可能会发生如此大的变化?如果新版本向后兼容,那么为旧名称创建新的动态链接 (ln) 还不够吗?
-- 最新的-- 真是个……白痴。我忘记了我拒绝了该主机上分区的执行权限:( ldd 命令按预期工作
【问题讨论】:
-
为什么是 sudo?
-
我不确定我是否也在没有 sudo 的情况下尝试过,我目前无法进行进一步测试,我今晚会再试一次,谢谢
-
你没有说明问题。什么是奇怪的行为?
-
我希望在 ldd 输出中得到动态库列表(由 readelf 显示)
-
@Shawn 在没有 sudo 的情况下得到相同的错误消息
标签: c linux shared-libraries ldd