首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ldd中缺少共享库

ldd中缺少共享库
EN

Server Fault用户
提问于 2014-07-30 14:01:21
回答 1查看 3K关注 0票数 2

我在CentOS 6.x上编译了Apache。在那里工作很好。

然后我把二进制文件移到了CentOS 7,我需要安装一些缺少的库,现在在那里可以正常工作了。

然后,我将二进制文件移到Archlinux。正如我所预期的,它并没有直接开始:

代码语言:javascript
复制
httpd: symbol lookup error: /software_pack/httpd-2.2.25/lib/libapr-1.so.0: undefined symbol: dlopen

但是,如果我使用ldd /software_pack/httpd-2.2.25/lib/libapr-1.so.0,它在CentOS和Archlinux上给出了不同的结果。在Archlinux上,根本没有显示libdl.so?

从CentOS哪里知道文件需要libdl.so.2?

CentOS 6.x:

代码语言:javascript
复制
# ls -la /software_pack/httpd-2.2.25/lib/libaprutil-1.so.0
lrwxrwxrwx 1 root root 21 Jul 30 09:47 /software_pack/httpd-2.2.25/lib/libaprutil-1.so.0 -> libaprutil-1.so.0.5.2
# ldd /software_pack/httpd-2.2.25/lib/libaprutil-1.so.0.5.2
        linux-vdso.so.1 =>  (0x00007fffec400000)
        libexpat.so.0 => /software_pack/httpd-2.2.25/lib/libexpat.so.0 (0x00007f5ec94d8000)
        libapr-1.so.0 => /software_pack/httpd-2.2.25/lib/libapr-1.so.0 (0x00007f5ec92a8000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f5ec9098000)
        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f5ec8e60000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f5ec8c40000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f5ec88a8000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f5ec9928000)
        libfreebl3.so => /lib64/libfreebl3.so (0x00007f5ec8630000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f5ec8428000)   <<<<<<<< Missing in arch

在Archlinux上:

代码语言:javascript
复制
# ls -la /software_pack/httpd-2.2.25/lib/libaprutil-1.so.0
lrwxrwxrwx 1 root root 21 Jul 30 10:47 /software_pack/httpd-2.2.25/lib/libaprutil-1.so.0 -> libaprutil-1.so.0.5.2
# ldd /software_pack/httpd-2.2.25/lib/libaprutil-1.so.0.5.2
        linux-vdso.so.1 (0x00007fff7cdd3000)
        libexpat.so.0 => /software_pack/httpd-2.2.25/lib/libexpat.so.0 (0x00007f5aef4e7000)
        libapr-1.so.0 => /software_pack/httpd-2.2.25/lib/libapr-1.so.0 (0x00007f5aef2ba000)
        librt.so.1 => /usr/lib/librt.so.1 (0x00007f5aef084000)
        libcrypt.so.1 => /usr/lib/libcrypt.so.1 (0x00007f5aeee4b000)
        libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f5aeec2d000)
        libc.so.6 => /usr/lib/libc.so.6 (0x00007f5aee87f000)
        /usr/lib64/ld-linux-x86-64.so.2 (0x00007f5aef934000)
EN

回答 1

Server Fault用户

回答已采纳

发布于 2014-07-30 14:34:17

dlopen通常由libdl.so.2提供。在Arch上,libdl.so.2是由glibc包提供的。如果您没有安装glibc,这将是非常奇怪的,但是无论如何,检查您的系统上是否有libdl.so.2

还可以使用readelf命令输出共享对象的符号表,并检查是否导出了特定符号:

代码语言:javascript
复制
readelf -Ws /usr/lib/libdl.so.2

关于同一二进制文件的ldd输出在不同系统上可能有所不同的一些信息可以在这里找到:

https://stackoverflow.com/questions/12714219/ldd-different-output-same-binary-different-distros

票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/616619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档