"/ Usr / bin / ld: não é possível encontrar -lz"

172

Estou tentando compilar o código fonte do Android no Ubuntu 10.04. Eu recebo um erro dizendo:

/ usr / bin / ld: não é possível encontrar -lz

Você pode me dizer como posso corrigir isso? O que cannot find -lzsignifica isso ? Aqui está a mensagem de erro completa:

external/qemu/Makefile.android:1101: warning: overriding commands for target `external/qemu/android/avd/hw-config-defs.h'
external/qemu/Makefile.android:933: warning: ignoring old commands for target `external/qemu/android/avd/hw-config-defs.h'
host SharedLib: libneo_cgi (out/host/linux-x86/obj/lib/libneo_cgi.so)
/usr/bin/ld: skipping incompatible /usr/lib/gcc/i486-linux-gnu/4.4.3/../../../libz.so when searching for -lz
/usr/bin/ld: skipping incompatible /usr/lib/gcc/i486-linux-gnu/4.4.3/../../../libz.a when searching for -lz
/usr/bin/ld: skipping incompatible /usr/lib/libz.so when searching for -lz
/usr/bin/ld: skipping incompatible /usr/lib/libz.a when searching for -lz
/usr/bin/ld: cannot find -lz
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/lib/libneo_cgi.so] Error 1

E a minha versão da versão GCC:

scheung@scheung-virtual-box:/media/EXTDIV/mydroid$ gcc --version
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Eu já tenho a zlib1g-devbiblioteca instalada:

$ sudo apt-get install zlib1g-dev 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
zlib1g-dev is already the newest version.

(Eu entendo isso neste link .)

Michael
fonte

Respostas:

171

Eu tive exatamente o mesmo erro e, como você, a instalação do zlib1g-dev não foi corrigida. A instalação do lib32z1-dev me fez passar por isso. Eu tenho um sistema de 64 bits e parece que queria a biblioteca de 32 bits.

kylefinn
fonte
25
Ele trabalhou aqui com o libz-dev (pacote virtual para zlib1g-dev) no Kubuntu 12.04 x64.
Qsiris
10
Também me ajudou a instalar / construir o lxml-3.4.0 para Python via pip no Ubuntu 14.04 LTS / trusty. Obrigado!
Marian
117

Para instalação em x64 zlib1g-dev.

sudo apt-get install zlib1g-dev

Eu não preciso de todas as bibliotecas x86;)

phedoreanu
fonte
9
pode confirmar isso funcionou para instalar lxml via pip no Ubuntu 14.04
mwjackson
2
o mesmo para mim e para mwjackson, apesar de ter recebido zlib1g-devo metapacote libz-dev, como foi sugerido em outra resposta.
Mknaf
1
Se isso não funcionar, tente a versão estática zlib-static.
DearVolt
3
Confirmado no amd64 Ubuntu 18.04 LTS, Bionic Beaver
deinerson1
52

sudo apt-get install libz-dev no ubuntu.

Siva mbigai M
fonte
2
Alguém poderia esclarecer por que isso é necessário? Consegui instalar o python-lxml APENAS em um ambiente virtual depois de instalar este pacote. No entanto, se eu tentasse instalá-lo globalmente, não teria nenhum problema. : \
cballenar
Não tenho certeza sobre esse caso especificamente, mas python-lxmlexige amplamente a lógica contida na biblioteca zlib que ela não pode ou simplesmente não fornece. Se não conseguir acessar a biblioteca, porque está ausente ou com alguma barreira de permissões, não será possível criar / funcionar.
ti7 07/02
@cballenar: Resposta curta: Dependências ! python-lxmldepende de qualquer pacote que Provides: libz-dev. Os programas C / C ++ são compilados e vinculados a bibliotecas que fornecem funções, rotinas e estruturas de dados. Sistemas Unix usar .so, .a, .laarquivos e uso do Windows .dll. Esses são arquivos de biblioteca compartilhada compilados, que contêm rotinas nas quais outros programas podem se vincular e usar para implementar alguma funcionalidade. Para este exemplo: libzimplementa funções de compactação e descompactação de dados .
TrinitronX
@cballenar: Resposta longa / detalhes ( parte 1 ): libz-devé um pacote virtual no Ubuntu (verifique isso no seu sistema com :) apt show libz-dev. O outro pacote zlib1g-devfornece libz-dev, que inclui o arquivo da biblioteca compartilhada /usr/lib/x86_64-linux-gnu/libz.a, e os arquivos do cabeçalho C /usr/include/zconf.h & /usr/include/zlib.h. Você pode visualizar o conteúdo do pacote com:, dpkg -L zlib1g-devque mostra todos os arquivos que ele contém.
TrinitronX
@cballenar: Resposta longa ( parte 2 ): Como mencionado, libz-dev( também no Debian ) é fornecido por zlib1g-devmeio do Debian Package Provides: libz-devlinha no do pacote fonte Debian debian/control arquivo. É assim que o aptgerente de empacotamento sabe resolver a python-lxmldependência do pacote virtualenv em tempo de compilação libz-devvia zlib1g-dev.
TrinitronX
31

Acabei de encontrar esse problema e, ao contrário da solução aceita "seus arquivos make estão quebrados" e "as inclusões de host nunca devem ser incluídas em uma compilação cruzada"

A versão do Android inclui muitos executáveis ​​de host usados ​​pelo SDK para criar um aplicativo para Android. No meu caso, o make parou ao criar o zipalign, que é usado para otimizar um apk antes de instalar em um dispositivo Android.

A instalação de lib32z1-dev resolveu meu problema, no Ubuntu você pode instalá-lo com o seguinte comando:

sudo apt-get install lib32z1-dev
Adão
fonte
8

Eu tive exatamente o mesmo erro, instalar o zlib-devel resolveu meu problema, digite o comando e instale o pacote zlib.

No linux:

sudo apt-get install zlib*

No Centos:

sudo yum install zlib*
Abhi km
fonte
4

Isso significa que você pediu para incluir a biblioteca 'libz.a' ou 'libz.so' que contém um pacote de compactação e, embora o compilador tenha encontrado alguns arquivos, nenhum deles era adequado para a compilação que você está usando.

Você precisa alterar os parâmetros de construção ou instalar a biblioteca correta ou especificar onde a biblioteca correta está na linha de comando do link com uma -L/where/it/is/libopção de tipo.

Jonathan Leffler
fonte
4

Outra causa possível: você passou --static para o vinculador, mas só possui uma versão dinâmica da libz (libz.so), mas não uma versão que pode ser vinculada estaticamente (libz.a).

jhclark
fonte
4

Experimente uma dessas três soluções. Deve funcionar :):

  1. sudo apt-get install zlib1g-dev
  2. sudo apt-get instala libz-dev
  3. sudo apt-get install lib32z1-dev

Na verdade, o que está faltando não é o lzcomando, mas os arquivos de desenvolvimento da zlibbiblioteca. Portanto, você deve instalar o zlib1g-devlib for ex para obtê-lo.

Para sistemas do tipo rhel7, o pacote é zlib-devel

DINA TAKLIT
fonte
3

Isso mostrará dicas sobre por que o vinculador não deseja a biblioteca instalada:

LD_DEBUG=all make ...

Eu tive o mesmo problema em um contexto diferente: meu sistema /lib/libz.so.1 tinha dependências não satisfeitas da libc porque estava tentando vincular novamente uma versão diferente do sistema operacional.

qneill
fonte
1

para opensuse 12.3 (Dartmouth) (i586), sudo zypper install zlib-devel zlib-devel-static

eutiogênicos
fonte