При создании моей программы на Linux на основе Redhat (amd64) я получаю такую ошибку:
/usr/bin/ld: cannot find -lz
collect2: ld returned 1 exit status
Поиск в Интернете показал, что я не установил 32-битную версию zlib. Быстрый поиск показывает, что этот пакет у меня есть
[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
списки ВСЕ пакеты, а не только установленные. Чтобы узнать, установлен ли он, попробуйте следующее:
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
поскольку он искал статическую библиотеку.