“/usr/bin/ld:找不到 -lz”但 libz 存在

“/usr/bin/ld:找不到 -lz”但 libz 存在

当我在基于 Redhat 的 Linux(amd64)上编写程序时,出现以下错误:

/usr/bin/ld: cannot find -lz
collect2: ld returned 1 exit status

搜索互联网显示我尚未安装 zlib 32 位版本。快速搜索显示我有该软件包

[root@localhost trunk]# find / -name libz*
/lib64/libz.so.1
/lib64/libz.so.1.2.3
/lib/libz.so.1
/lib/libz.so.1.2.3
/usr/lib64/libz.so
/usr/lib64/purple-2/libzephyr.so
/usr/lib64/libzip.so.1.0.0
/usr/lib64/libzip.so.1

如您所见,两者都/lib包含/lib64libz 文件。接下来,我尝试找到 ldd 搜索路径,它显示 32 位和 64 位文件夹都包含在内

[root@localhost trunk]# ldconfig -v | grep -v ^$'\t'
/usr/lib64/ctapi:
/usr/lib64/mysql:
/usr/lib64/tcl8.5/tclx8.4:
/usr/lib64/xulrunner-2:
/lib:
/lib64:
/usr/lib:
/usr/lib64:
/lib/i686: (hwcap: 0x0008000000000000)
/lib64/tls: (hwcap: 0x8000000000000000)  
/usr/lib64/tls: (hwcap: 0x8000000000000000)
/usr/lib64/sse2: (hwcap: 0x0000000004000000)
/lib/i686/nosegneg: (hwcap: 0x0028000000000000)

所以我想知道为什么我仍然会收到那个错误!!!!

更新

我安装了zlib-devel(i686 和 x86_64),以下是确认信息

 [root@localhost trunk]# yum list zlib-devel
 Installed Packages
 zlib-devel.i686     1.2.3-27.el6             @sl
 zlib-devel.x86_64   1.2.3-27.el6             @sl

但我仍然遇到同样的错误。

更新2

修复了错误的符号链接后,我现在

[root@localhost trunk]# ls -l /lib/libz.so*
lrwxrwxrwx. 1 root root    18 Feb 23 22:58 /lib/libz.so -> /usr/lib64/libz.so
lrwxrwxrwx. 1 root root    13 Feb 18 12:06 /lib/libz.so.1 -> libz.so.1.2.3
-rwxr-xr-x. 1 root root 75332 Dec 10  2011 /lib/libz.so.1.2.3

但错误仍然存​​在

解决方案

解决方案

我发现我必须安装静态库。不知道为什么 Makefile 会搜索静态库!请参阅我的评论以了解软件包的名称。

谢谢火地岛求助

答案1

安装zlib-devel或添加libz.so符号链接至 lib 目录。

yum list列表全部软件包,而不仅仅是已安装的软件包。要确定是否已安装,请尝试以下操作:

yum list installed | grep zlib

这是来自 RHEL 6.3 参考系统:

# rpm -ql zlib-devel
/usr/include/zconf.h
/usr/include/zlib.h
/usr/lib64/libz.so                  <---- the symlink I mentioned
/usr/lib64/pkgconfig/zlib.pc
/usr/share/doc/zlib-devel-1.2.3
/usr/share/doc/zlib-devel-1.2.3/README
/usr/share/doc/zlib-devel-1.2.3/algorithm.txt
/usr/share/doc/zlib-devel-1.2.3/example.c
/usr/share/doc/zlib-devel-1.2.3/minigzip.c
/usr/share/man/man3/zlib.3.gz
# rpm -ql zlib-devel.i686
/usr/include/zconf.h
/usr/include/zlib.h
/usr/lib/libz.so                    <---- the symlink I mentioned
/usr/lib/pkgconfig/zlib.pc
/usr/share/doc/zlib-devel-1.2.3
/usr/share/doc/zlib-devel-1.2.3/README
/usr/share/doc/zlib-devel-1.2.3/algorithm.txt
/usr/share/doc/zlib-devel-1.2.3/example.c
/usr/share/doc/zlib-devel-1.2.3/minigzip.c
/usr/share/man/man3/zlib.3.gz

符号链接指向的内容:

# ls /usr/lib/libz.so -lhA
lrwxrwxrwx. 1 root root 23 Feb 23 20:32 /usr/lib/libz.so -> ../../lib/libz.so.1.2.3
# ls /usr/lib64/libz.so -lhA
lrwxrwxrwx. 1 root root 25 Feb 23 20:24 /usr/lib64/libz.so -> ../../lib64/libz.so.1.2.3

答案2

如果它对任何人有帮助 - 我的问题是cmake正在运行/usr/bin/g++ -static-libstdc++,导致错误输出:/usr/bin/ld: cannot find -lstdc++

sudo yum install libstdc++-static.x86_64由于正在寻找静态库,因此运行修复程序(在 RHEL/CentOS 上) 。

相关内容