在基于Redhat的linux(amd64)上编写我的程序时,出现这个错误:
/usr/bin/ld: cannot find -lz collect2: ld returned 1 exit status
search互联网显示,我没有安装zlib 32位版本。 快速search显示,我有这个包
[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文件。 接下来,我试图findlddsearchpath,它显示包括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)
所以我想知道为什么我仍然得到这个错误!
UPDATE
我安装了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
但是错误依然存在
解
解
我发现我必须安装静态库。 不知道为什么Makefilesearch静态库! 请参阅我的意见的包名称。
谢谢你的帮助
安装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
如果它帮助任何人 – 我的问题是cmake正在运行/usr/bin/g++ -static-libstdc++导致错误输出: /usr/bin/ld: cannot find -lstdc++ 。
修复(在RHEL / CentOS上)是运行sudo yum install libstdc++-static.x86_64因为它正在寻找静态库。