"/ Usr / bin / ld: no se puede encontrar -lz"

172

Estoy tratando de compilar el código fuente de Android en Ubuntu 10.04. Me sale un error que dice:

/ usr / bin / ld: no se puede encontrar -lz

¿Me puede decir cómo puedo solucionarlo? Que cannot find -lzsignifica Aquí está el mensaje de error completo:

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

Y mi salida de versión 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.

Ya he la zlib1g-devinstalación de la biblioteca:

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

(Lo obtengo de este enlace ).

Miguel
fuente

Respuestas:

171

Tuve exactamente el mismo error y, como usted, la instalación de zlib1g-dev no lo solucionó. Instalar lib32z1-dev me superó. Tengo un sistema de 64 bits y parece que quería la biblioteca de 32 bits.

kylefinn
fuente
25
Funcionó aquí con libz-dev (paquete virtual para zlib1g-dev) en Kubuntu 12.04 x64.
Qsiris
10
También me ayudó a instalar / construir lxml-3.4.0 para Python a través de pip en Ubuntu 14.04 LTS / trusty. ¡Gracias!
Marian
117

Para instalar x64 zlib1g-dev.

sudo apt-get install zlib1g-dev

No necesito todas las bibliotecas x86;)

phedoreanu
fuente
9
Puede confirmar esto trabajado para instalar lxml través pip en ubuntu 14.04
mwjackson
2
lo mismo para mí como para mwjackson, aunque obtuve zlib1g-devel metapaquete libz-dev, como se sugirió en otra respuesta.
mknaf
1
Si esto no funciona, prueba la versión estática zlib-static.
DearVolt
3
Confirmado en amd64 Ubuntu 18.04 LTS, Bionic Beaver
deinerson1
52

sudo apt-get install libz-dev en ubuntu

Siva mbigai M
fuente
2
¿Podría alguien arrojar algo de luz sobre por qué es esto necesario? Pude instalar python-lxml en un entorno virtual SOLO después de instalar este paquete. Sin embargo, si intentara instalarlo globalmente, no tendría ningún problema. : \
cballenar
No estoy seguro de ese caso específicamente, pero en general python-lxmlrequiere lógica contenida en la biblioteca zlib que no puede o simplemente no proporciona. Si no puede llegar a la biblioteca, ya sea porque falta o por alguna barrera de permisos, no podrá construir / funcionar.
ti7
@cballenar: Respuesta corta: ¡ Dependencias ! python-lxmlDepende de cualquier paquete que Provides: libz-dev. Los programas C / C ++ se compilan y vinculan con bibliotecas que proporcionan funciones, rutinas y estructuras de datos. Sistemas Unix utilizan .so, .a, .laarchivos y el uso de Windows .dll. Estos son archivos de biblioteca compartida compilados, que contienen rutinas con las que otros programas pueden vincularse y utilizar para implementar alguna funcionalidad. Para este ejemplo: libzimplementa funciones de compresión y descompresión de datos .
TrinitronX
@cballenar: Respuesta larga / detalles ( parte 1 ): libz-deves un paquete virtual en Ubuntu (verifique esto en su sistema con :) apt show libz-dev. El otro paquete zlib1g-devproporciona libz-dev, que incluye el archivo de biblioteca compartida /usr/lib/x86_64-linux-gnu/libz.ay los archivos de encabezado C /usr/include/zconf.h & /usr/include/zlib.h. Puede ver el contenido del paquete con:, dpkg -L zlib1g-devque muestra todos los archivos que contiene.
TrinitronX
@cballenar: Respuesta larga ( parte 2 ): Como se mencionó, libz-dev( también en Debian ) se proporciona a zlib1g-devtravés de la Provides: libz-devlínea del paquete Debian en el archivo del paquete fuente de Debian debian/control . Así es como el aptadministrador de empaques sabe cómo resolver la python-lxmldependencia del paquete virtualenv en tiempo de compilación en libz-devvia zlib1g-dev.
TrinitronX
31

Acabo de encontrar este problema y contrario a la solución aceptada de "sus archivos de creación están rotos" y "el host incluye nunca debe incluirse en una compilación cruzada"

La compilación de Android incluye muchos ejecutables de host utilizados por el SDK para compilar una aplicación de Android. En mi caso, la marca se detuvo al construir zipalign, que se utiliza para optimizar un apk antes de instalarlo en un dispositivo Android.

Instalar lib32z1-dev resolvió mi problema, en Ubuntu puedes instalarlo con el siguiente comando:

sudo apt-get install lib32z1-dev
Adán
fuente
8

Tuve exactamente el mismo error, la instalación de zlib-devel resolvió mi problema, escriba el comando e instale el paquete zlib.

En linux:

sudo apt-get install zlib*

En Centos:

sudo yum install zlib*
Abhi km
fuente
4

Significa que le pidió que incluyera la biblioteca 'libz.a' o 'libz.so' que contiene un paquete de compresión, y aunque el compilador encontró algunos archivos, ninguno de ellos era adecuado para la compilación que está utilizando.

Debe cambiar los parámetros de compilación o instalar la biblioteca correcta o especificar dónde está la biblioteca correcta en la línea de comando de enlace con una -L/where/it/is/libopción de tipo.

Jonathan Leffler
fuente
4

Otra posible causa: ha pasado - estático al enlazador, pero solo tiene una versión dinámica de libz (libz.so), pero no una versión que pueda estar enlazada estáticamente (libz.a).

jhclark
fuente
4

Prueba una de esas tres soluciones. Debe funcionar :):

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

De hecho, lo que falta no es el lzcomando, sino los archivos de desarrollo de la zlibbiblioteca, por lo que debe instalar zlib1g-devlib for ex para obtenerlo.

Para sistemas similares a rhel7, el paquete es zlib-devel

DINA TAKLIT
fuente
3

Esto le mostrará pistas sobre por qué el enlazador no quiere la biblioteca instalada:

LD_DEBUG=all make ...

Tuve el mismo problema en un contexto diferente: mi sistema /lib/libz.so.1 tenía dependencias insatisfechas en libc porque estaba tratando de volver a vincularme con una versión diferente del sistema operativo.

qneill
fuente
1

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

euthygenes
fuente