"/ Usr / bin / ld: -lz kann nicht gefunden werden"

172

Ich versuche, Android-Quellcode unter Ubuntu 10.04 zu kompilieren. Ich erhalte eine Fehlermeldung:

/ usr / bin / ld: -lz kann nicht gefunden werden

Können Sie mir bitte sagen, wie ich das Problem beheben kann? Was heißt cannot find -lzdas Hier ist die vollständige Fehlermeldung:

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

Und meine GCC-Version Ausgabe:

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.

Ich habe die zlib1g-devBibliothek bereits installiert:

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

(Das bekomme ich von diesem Link .)

Michael
quelle

Antworten:

171

Ich hatte genau den gleichen Fehler und wie Sie hat die Installation von zlib1g-dev ihn nicht behoben. Die Installation von lib32z1-dev hat mich daran vorbei gebracht. Ich habe ein 64-Bit-System und es scheint, als wollte es die 32-Bit-Bibliothek.

Kylefinn
quelle
25
Es funktionierte hier mit libz-dev (virtuelles Paket für zlib1g-dev) unter Kubuntu 12.04 x64.
Qsiris
10
Hat mir auch geholfen, lxml-3.4.0 für Python über pip unter Ubuntu 14.04 LTS / trusty zu installieren / zu erstellen. Vielen Dank!
Marian
117

Für x64 installieren zlib1g-dev.

sudo apt-get install zlib1g-dev

Ich brauche nicht alle x86-Bibliotheken;)

Phedoreanu
quelle
9
kann bestätigen, dass dies für die Installation von lxml über pip auf Ubuntu 14.04
mwjackson
2
das gleiche für mich wie für mwjackson, obwohl ich zlib1g-devüber das Metapaket gekommen bin libz-dev, wie in einer anderen Antwort vorgeschlagen wurde.
Mknaf
1
Wenn dies nicht funktioniert, versuchen Sie es mit der statischen Version zlib-static.
DearVolt
3
Bestätigt auf amd64 Ubuntu 18.04 LTS, Bionic Beaver
deinerson1
52

sudo apt-get install libz-dev in Ubuntu.

Siva mbigai M.
quelle
2
Könnte jemand etwas Licht ins Dunkel bringen, warum dies notwendig ist? Ich konnte python-lxml NUR nach der Installation dieses Pakets in einer virtuellen Umgebung installieren. Wenn ich jedoch versuchen würde, es global zu installieren, hätte ich überhaupt kein Problem. : \
cballenar
Ich bin mir in diesem Fall nicht sicher, python-lxmlbenötige jedoch im Großen und Ganzen eine in der zlib-Bibliothek enthaltene Logik, die sie selbst nicht bereitstellen kann oder einfach nicht bereitstellt. Wenn es die Bibliothek nicht erreichen kann, weil es fehlt oder eine Berechtigungsbarriere besteht, kann es nicht erstellt / funktionieren.
7.
@cballenar: Kurze Antwort: Abhängigkeiten ! python-lxmlhängt von jedem Paket ab, das Provides: libz-dev. C / C ++ - Programme werden kompiliert und mit Bibliotheken verknüpft, die Funktionen, Routinen und Datenstrukturen bereitstellen. Unix - Systeme verwenden .so, .a, .laDateien und Windows - Anwendung .dll. Hierbei handelt es sich um kompilierte gemeinsam genutzte Bibliotheksdateien, die Routinen enthalten, mit denen andere Programme verknüpfen und einige Funktionen implementieren können. In diesem Beispiel: libzImplementiert Datenkomprimierungs- und Dekomprimierungsfunktionen .
TrinitronX
@cballenar: Lange Antwort / Details ( Teil 1 ): libz-devist ein virtuelles Paket unter Ubuntu (überprüfen Sie dies auf Ihrem System mit :) apt show libz-dev. Das andere Paket zlib1g-devbietet libz-dev, die die gemeinsam genutzte Bibliothek - Datei enthält /usr/lib/x86_64-linux-gnu/libz.a, und die C - Header - Dateien /usr/include/zconf.h und /usr/include/zlib.h. Sie können den Paketinhalt mit: anzeigen dpkg -L zlib1g-dev, das alle darin enthaltenen Dateien anzeigt.
TrinitronX
@cballenar: Lange Antwort ( Teil 2 ): Wie bereits erwähnt, libz-dev( auch in Debian ) wird zur Verfügung gestellt von zlib1g-devüber das Debian - Paket Provides: libz-devin der Zeile Quellcode - Paket des Debian debian/control - Datei. Auf diese Weise kann der aptVerpackungsmanager die python-lxmlAbhängigkeit des virtuellen Env-Pakets zur Kompilierungszeit von libz-devvia auflösen zlib1g-dev.
TrinitronX
31

Ich bin gerade auf dieses Problem gestoßen und widerspreche der akzeptierten Lösung "Ihre Make-Dateien sind kaputt" und "Host-Includes sollten niemals in eine Cross-Kompilierung aufgenommen werden".

Der Android-Build enthält viele ausführbare Host-Dateien, die vom SDK zum Erstellen einer Android-App verwendet werden. In meinem Fall wurde das make beim Erstellen von zipalign gestoppt, mit dem ein apk vor der Installation auf einem Android-Gerät optimiert wird.

Die Installation von lib32z1-dev hat mein Problem gelöst. Unter Ubuntu können Sie es mit dem folgenden Befehl installieren:

sudo apt-get install lib32z1-dev
Adam
quelle
8

Ich hatte genau den gleichen Fehler. Die Installation von zlib-devel löste mein Problem. Geben Sie den Befehl ein und installieren Sie das zlib-Paket.

Unter Linux:

sudo apt-get install zlib*

Auf Centos:

sudo yum install zlib*
Abhi km
quelle
4

Dies bedeutet, dass Sie darum gebeten haben, die Bibliothek 'libz.a' oder 'libz.so' aufzunehmen, die ein Komprimierungspaket enthält. Obwohl der Compiler einige Dateien gefunden hat, war keine davon für den von Ihnen verwendeten Build geeignet.

Sie müssen entweder Ihre Build-Parameter ändern oder die richtige Bibliothek installieren oder angeben, wo sich die richtige Bibliothek in der Link-Befehlszeile mit einer -L/where/it/is/libTypoption befindet.

Jonathan Leffler
quelle
4

Eine weitere mögliche Ursache: Sie haben --static an den Linker übergeben, aber Sie haben nur eine dynamische Version von libz (libz.so), aber keine Version, die statisch verknüpft werden kann (libz.a).

jhclark
quelle
4

Versuchen Sie eine dieser drei Lösungen. Es muss funktionieren :):

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

In der Tat fehlt nicht der lzBefehl, sondern die Entwicklungsdateien für die zlibBibliothek. Sie sollten also zlib1g-devlib for ex installieren , um es zu erhalten.

Für rhel7-ähnliche Systeme ist das Paket zlib-devel

DINA TAKLIT
quelle
3

Dies zeigt Ihnen Hinweise, warum der Linker die installierte Bibliothek nicht möchte:

LD_DEBUG=all make ...

Ich hatte das gleiche Problem in einem anderen Kontext: Mein System /lib/libz.so.1 hatte unbefriedigte Abhängigkeiten von libc, weil ich versuchte, eine Verbindung zu einer anderen Version des Betriebssystems herzustellen.

qneill
quelle
1

für opensuse 12.3 (Dartmouth) (i586) sudo zypper installiere zlib-devel zlib-devel-static

Euthygenes
quelle