我正在尝试从源代码安装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:
中的真实库/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
最后一个符号链接是我自己创建的尝试解决此问题的链接,以防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)
答案 0 :(得分:1)
将新文件放入ld.so搜索路径后,必须运行ldconfig
来更新缓存。
请参阅ldconfig联机帮助页以获取参考:http://linux.die.net/man/8/ldconfig
答案 1 :(得分:1)
问题最终成为我的编译器 - 链接器工具链的一个问题。 gcc用于编译所有库的specs文件指向位于/ tools /目录中的旧版本的ld。根据指令here重新调整specs文件导致gcc生成二进制文件,这些二进制文件针对正确的链接器进行编译,并调用正确的动态库加载器,该加载器能够搜索/ lib和/ usr / lib并找到库。换句话说,在调整gcc specs文件时要小心非常!