“/ usr / bin / ld: não é possível encontrar -lz”, mas a libz existe

2

Ao fazer meu programa no linux baseado no Redhat (amd64), recebo este erro:

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

A pesquisa na internet revela que eu não instalei a versão 32bit do zlib. Uma pesquisa rápida mostra que tenho esse pacote

[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

Como você pode ver, tanto /lib quanto /lib64 contêm o arquivo libz. Em seguida, tentei encontrar o caminho de pesquisa do ldd e ele mostra que as pastas de 32 e 64 bits estão incluídas

[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)

Então, eu me pergunto por que ainda recebo esse erro !!!!

UPDATE

Eu instalei zlib-devel (tanto em i686 quanto em x86_64) e aqui está a confirmação

 [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

No entanto, ainda recebo o mesmo erro.

UPDATE 2

Depois de corrigir o link simbólico incorreto, agora tenho

[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

Mas o erro ainda existe

SOLUÇÃO

SOLUÇÃO

Descobri que tenho que instalar bibliotecas estáticas. Não sei porque o Makefile procura por bibliotecas estáticas! Por favor, consulte os meus comentários para o nome dos pacotes.

Obrigado fuero para ajuda

    
por mahmood 23.02.2013 / 20:10

2 respostas

4

Instale zlib-devel ou adicione um link simbólico libz.so aos diretórios lib.

yum list lista os pacotes ALL , não apenas os instalados. Para descobrir se ele está instalado, tente o seguinte:

yum list installed | grep zlib

Isto é de um sistema de referência do 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

O que os links simbólicos apontam para:

# 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
    
por 23.02.2013 / 20:14
0

Se ajudar alguém, o problema foi que cmake estava executando /usr/bin/g++ -static-libstdc++ , o que causou a saída de erro: /usr/bin/ld: cannot find -lstdc++ .

A correção (no RHEL / CentOS) era executar sudo yum install libstdc++-static.x86_64 desde que ele estava procurando pela biblioteca estática.

    
por 25.07.2017 / 16:44