linux - 找不到共享库但在 ld.so.conf 路径中

标签 linux

我正在尝试从源代码安装 Cracklib 2.9.6,以便我可以针对它构建 Shadow,但是我在尝试构建和安装词典时遇到了问题。

/sources/cracklib-2.9.6$ create-cracklib-dict /usr/share/dict/cracklib-words \
/usr/share/dict/cracklib-extra-words
cracklib-packer: error while loading shared libraries: libcrack.so.2:
cannot open shared object file: No such file or directory

共享库安装在/lib 中:

/sources/cracklib-2.9.6$ ls /lib/libcrack*
/lib/libcrack.so.2  /lib/libcrack.so.2.9.0

/usr/lib 中有指向/lib 中真实库的符号链接(symbolic link):

/sources/cracklib-2.9.6$ ls -al /usr/lib/libcrack*
-rwxr-xr-x 1 root root 913 Jul 17 22:06 /usr/lib/libcrack.la
lrwxrwxrwx 1 root root  27 Jul 17 22:06 /usr/lib/libcrack.so -> ../../lib    /libcrack.so.2.9.0
lrwxrwxrwx 1 root root  23 Jul 17 22:28 /usr/lib/libcrack.so.2 -> ../../lib/libcrack.so.2

最后一个符号链接(symbolic link)是我自己创建的,用于尝试解决此问题,以防 create-cracklib-dict 仅在/usr/lib 中查找共享库。我不知道为什么 create-cracklib-dict 找不到它们。我对从源代码编译的其他几个库使用了类似的安装方法,没有遇到任何问题。

编辑:我现在遇到了 bunzip2 的同样问题。如果我使用 LD_PRELOAD=/lib/libbz2.so.1.0/bin/bunzip2,则该程序可以运行。这是我的/etc/ld.so.conf:

# Begin /etc/ld.so.conf
/usr/local/lib
/opt/lib
/lib

# Add an include directory
include /etc/ld.so.conf.d/*.conf

运行 ldd -p 显示/lib 目录在 ld 搜索的路径内。这是 ldconfig -v

的输出
/sources/XML-Parser-2.44$ cat ldconfig.log
/usr/local/lib:
/lib:
    libdl.so.2 -> libdl-2.23.so
    libSegFault.so -> libSegFault.so
    libpcprofile.so -> libpcprofile.so
    libz.so.1 -> libz.so.1.2.8
    libcom_err.so.2 -> libcom_err.so.2.1
    libmemusage.so -> libmemusage.so
    libe2p.so.2 -> libe2p.so.2.3
    libc.so.6 -> libc-2.23.so
    libcidn.so.1 -> libcidn-2.23.so
    libcrypt.so.1 -> libcrypt-2.23.so
    libnss_files.so.2 -> libnss_files-2.23.so
    libnsl.so.1 -> libnsl-2.23.so
    libm.so.6 -> libm-2.23.so
    librt.so.1 -> librt-2.23.so
    libnss_hesiod.so.2 -> libnss_hesiod-2.23.so
    libpthread.so.0 -> libpthread-2.23.so
    libutil.so.1 -> libutil-2.23.so
    ld-linux.so.2 -> ld-2.23.so
    libresolv.so.2 -> libresolv-2.23.so
    libncursesw.so.6 -> libncursesw.so.6.0
    libnss_db.so.2 -> libnss_db-2.23.so
    libss.so.2 -> libss.so.2.0
    libreadline.so.6 -> libreadline.so.6.3
    libBrokenLocale.so.1 -> libBrokenLocale-2.23.so
    libcap.so.2 -> libcap.so.2.25
    libnss_nis.so.2 -> libnss_nis-2.23.so
    libnss_compat.so.2 -> libnss_compat-2.23.so
    libattr.so.1 -> libattr.so.1.1.0
    libprocps.so.5 -> libprocps.so.5.0.0
    libanl.so.1 -> libanl-2.23.so
    libacl.so.1 -> libacl.so.1.1.0
    libcrack.so.2 -> libcrack.so.2.9.0
    libext2fs.so.2 -> libext2fs.so.2.4
    libbz2.so.1.0 -> libbz2.so.1.0.6
    libnss_dns.so.2 -> libnss_dns-2.23.so
    libhistory.so.6 -> libhistory.so.6.3
    libnss_nisplus.so.2 -> libnss_nisplus-2.23.so
    libthread_db.so.1 -> libthread_db-1.0.so
/usr/lib:
    libssp.so.0 -> libssp.so.0.0.0
    libubsan.so.0 -> libubsan.so.0.0.0
    libgcc_s.so.1 -> libgcc_s.so.1
    libmpfr.so.4 -> libmpfr.so.4.1.3
    libltdl.so.7 -> libltdl.so.7.3.1
    libgdbm.so.4 -> libgdbm.so.4.0.0
    libmenuw.so.6 -> libmenuw.so.6.0
    libformw.so.6 -> libformw.so.6.0
    libasan.so.2 -> libasan.so.2.0.0
    libexpat.so.1 -> libexpat.so.1.6.0
    libquadmath.so.0 -> libquadmath.so.0.0.0
    libgmp.so.10 -> libgmp.so.10.3.0
    libgdbm_compat.so.4 -> libgdbm_compat.so.4.0.0
    libfl.so.2 -> libfl.so.2.0.0
    libitm.so.1 -> libitm.so.1.0.0
    libopcodes-2.26.20160125.so -> libopcodes.so
    libgomp-plugin-host_nonshm.so.1 -> libgomp-plugin-host_nonshm.so.1.0.0
    libcilkrts.so.5 -> libcilkrts.so.5.0.0
    libatomic.so.1 -> libatomic.so.1.1.0
    libgmpxx.so.4 -> libgmpxx.so.4.5.0
    libvtv.so.0 -> libvtv.so.0.0.0
    libmagic.so.1 -> libmagic.so.1.0.0
    libcc1.so.0 -> libcc1.so.0.0.0
    libstdc++.so.6 -> libstdc++.so.6.0.21
    libbfd-2.26.20160125.so -> libbfd.so
    libmpc.so.3 -> libmpc.so.3.0.0
    libgomp.so.1 -> libgomp.so.1.0.0
    libfl_pic.so.2 -> libfl_pic.so.2.0.0
    libpanelw.so.6 -> libpanelw.so.6.0

不过,当我调用 ldconfig -v 时发生了一些有趣的事情,我收到了以下消息:

/sources/XML-Parser-2.44$ ldconfig -v > ldconfig.log
ldconfig: Path `/lib' given more than once
ldconfig: Path `/usr/lib' given more than once

运行 ldd -d -r/bin/bunzip2 结果如下:

/sources/XML-Parser-2.44$ ldd -d -r /bin/bunzip2
    linux-gate.so.1 (0xb77bc000)
    libbz2.so.1.0 => not found
    libc.so.6 => /tools/lib/libc.so.6 (0xb7608000)
    /tools/lib/ld-linux.so.2 (0xb77bd000)
undefined symbol: BZ2_bzlibVersion  (/bin/bunzip2)
undefined symbol: BZ2_bzReadClose   (/bin/bunzip2)
undefined symbol: BZ2_bzWriteOpen   (/bin/bunzip2)
undefined symbol: BZ2_bzWrite   (/bin/bunzip2)
undefined symbol: BZ2_bzReadGetUnused   (/bin/bunzip2)
undefined symbol: BZ2_bzWriteClose64    (/bin/bunzip2)
undefined symbol: BZ2_bzReadOpen    (/bin/bunzip2)
undefined symbol: BZ2_bzRead    (/bin/bunzip2)

最佳答案

将新文件放入 ld.so 搜索路径后,必须运行 ldconfig 来更新缓存。

引用 ldconfig 联机帮助页:http://linux.die.net/man/8/ldconfig

关于linux - 找不到共享库但在 ld.so.conf 路径中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38426626/

相关文章:

php - 用md5加密文件名

Python pygodaddy 连接超时

c# - 让 Mono 运行时运行进程

c - 可靠地以56K逐字节读取linux中的串行数据

c - 告诉伪终端的从端口名称

linux - 找出函数符号在目标文件 (.o) 中的可见性

linux - 如何显示ack-grep的进度

linux - 在 linux 服务器上安装 Glassfish 以兼容 JSP 和 Servlet

c - 在 Win 7 (cygwin) 中构建 OpenOCD 时如何解决 "undefined reference to ` isascii'"

c - Linux 内核为 vmlinux 提供了 undefined reference ,但编译了 .o 文件