在基于 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
包含/lib64
libz 文件。接下来我尝试找到 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要搜索静态库!包名请参考我的评论。
感谢fuero的帮助
安装
zlib-devel
或添加libz.so
符号链接到 lib 目录。yum list
列出所有包,而不仅仅是已安装的包。要确定它是否已安装,请尝试以下操作:这是来自 RHEL 6.3 参考系统:
符号链接指向什么:
如果它对任何人有帮助 - 我的问题是
cmake
正在运行/usr/bin/g++ -static-libstdc++
导致错误输出:/usr/bin/ld: cannot find -lstdc++
。修复(在 RHEL/CentOS 上)是运行的,
sudo yum install libstdc++-static.x86_64
因为它正在寻找静态库。