"/ Usr / bin / ld: impossibile trovare -lz"


172

Sto cercando di compilare il codice sorgente Android sotto Ubuntu 10.04. Viene visualizzato un errore che dice:

/ usr / bin / ld: impossibile trovare -lz

Potete per favore dirmi come posso ripararlo? Cosa cannot find -lzsignifica? Ecco il messaggio di errore 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

E l'output della mia versione 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.

Ho già installato la zlib1g-devlibreria:

$ 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 capisco da questo link .)

Risposte:


171

Ho avuto lo stesso errore esatto e, come te, l'installazione di zlib1g-dev non ha risolto il problema. L'installazione di lib32z1-dev mi ha superato. Ho un sistema a 64 bit e sembra che volesse la libreria a 32 bit.


25
Ha funzionato qui con libz-dev (pacchetto virtuale per zlib1g-dev) su Kubuntu 12.04 x64.
Qsiris,

10
Mi ha anche aiutato a installare / costruire lxml-3.4.0 per Python tramite pip su Ubuntu 14.04 LTS / fidato. Grazie!
Marian,

117

Per l'installazione x64 zlib1g-dev.

sudo apt-get install zlib1g-dev

Non ho bisogno di tutte le librerie x86;)


9
posso confermare che ha funzionato per installare lxml tramite pip su Ubuntu 14.04
mwjackson

2
lo stesso per me come per mwjackson, anche se ho ricevuto zlib1g-devil metapacchetto libz-dev, come suggerito in un'altra risposta.
mknaf,

1
Se questo non funziona, prova la versione statica zlib-static.
DearVolt,

3
Confermato su Ubuntu 18.04 LTS amd64, Bionic Beaver
deinerson1

52

sudo apt-get install libz-dev in Ubuntu.


2
Qualcuno potrebbe far luce sul perché questo è necessario? Sono stato in grado di installare python-lxml in un ambiente virtuale SOLO dopo aver installato questo pacchetto. Tuttavia, se provassi a installarlo a livello globale, non avrei alcun problema. : \
cballenar il

Non sono sicuro di questo caso in particolare, ma python-lxmlrichiede in generale la logica contenuta nella libreria zlib che non può o semplicemente non si fornisce. Se non riesce a raggiungere la libreria, sia perché mancante o con qualche barriera di autorizzazioni, non sarà in grado di costruire / funzionare.
ti7

@cballenar: risposta breve: dipendenze ! python-lxmldipende da qualsiasi pacchetto che Provides: libz-dev. I programmi C / C ++ sono compilati e collegati a librerie che forniscono funzioni, routine e strutture di dati. Sistemi Unix utilizzano .so, .a, .lafile e l'utilizzo di Windows .dll. Questi sono file di libreria condivisa compilati, che contengono routine a cui altri programmi possono collegarsi e che utilizzano per implementare alcune funzionalità. Per questo esempio: libzimplementa le funzioni di compressione e decompressione dei dati .
TrinitronX,

@cballenar: risposta / dettagli lunghi ( parte 1 ): libz-devè un pacchetto virtuale su Ubuntu (verificalo sul tuo sistema con :) apt show libz-dev. L'altro pacchetto zlib1g-devfornisce libz-dev, che include il file della libreria condivisa /usr/lib/x86_64-linux-gnu/libz.ae i file di intestazione C /usr/include/zconf.h & /usr/include/zlib.h. È possibile visualizzare il contenuto del pacchetto con:, dpkg -L zlib1g-devche mostra tutti i file che contiene.
TrinitronX

@cballenar: Risposta lunga ( parte 2 ): Come si è detto, libz-dev( anche in Debian ) viene fornita dalla zlib1g-devvia Debian Package Provides: libz-devlinea nella del pacchetto sorgente Debian debian/control file. Questo è il modo in cui il aptgestore del packaging sa risolvere la python-lxmldipendenza del pacchetto virtualenv in fase di compilazione da libz-devvia zlib1g-dev.
TrinitronX

31

Ho appena riscontrato questo problema e contrariamente alla soluzione accettata di "i tuoi file di make sono rotti" e "l'host include non dovrebbe mai essere incluso in una compilazione incrociata"

La build Android include molti eseguibili host utilizzati dall'SDK per creare un'app Android. Nel mio caso, make si è arrestato durante la creazione di zipalign, che viene utilizzato per ottimizzare un apk prima di installarlo su un dispositivo Android.

L'installazione di lib32z1-dev ha risolto il mio problema, sotto Ubuntu puoi installarlo con il seguente comando:

sudo apt-get install lib32z1-dev

8

Ho avuto lo stesso errore esatto, l'installazione di zlib-devel ha risolto il mio problema, digitare il comando e installare il pacchetto zlib.

Su Linux:

sudo apt-get install zlib*

Su Centos:

sudo yum install zlib*

4

Significa che gli hai chiesto di includere la libreria 'libz.a' o 'libz.so' contenente un pacchetto di compressione, e sebbene il compilatore abbia trovato alcuni file, nessuno di questi era adatto alla build che stai usando.

È necessario modificare i parametri di compilazione o è necessario installare la libreria corretta oppure è necessario specificare dove si trova la libreria corretta sulla riga comandi di collegamento con -L/where/it/is/libun'opzione di tipo.


4

Un'altra possibile causa: hai passato --static al linker, ma hai solo una versione dinamica di libz (libz.so), ma non una versione che può essere staticamente collegata (libz.a).


4

Prova una di queste tre soluzioni. Deve funzionare :):

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

In realtà ciò che manca non è il lzcomando, ma i file di sviluppo per la zliblibreria. Quindi è necessario installare zlib1g-devlib per ex per ottenerlo.

Per i sistemi simili a rhel7 il pacchetto è zlib-devel


3

Questo ti mostrerà indizi sul perché il linker non vuole la libreria installata:

LD_DEBUG=all make ...

Ho avuto lo stesso problema in un contesto diverso: il mio sistema /lib/libz.so.1 aveva dipendenze insoddisfatte da libc perché stavo cercando di ricollegare su una versione diversa del sistema operativo.


1

per opensuse 12.3 (Dartmouth) (i586) sudo zypper installa zlib-devel zlib-devel-static


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.