"/ Usr / bin / ld: impossible de trouver -lz"

172

J'essaie de compiler le code source Android sous Ubuntu 10.04. Je reçois une erreur disant,

/ usr / bin / ld: impossible de trouver -lz

Pouvez-vous me dire comment puis-je résoudre ce problème? Que veut cannot find -lzdire? Voici le message d'erreur complet:

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

Et ma sortie de version 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.

J'ai déjà zlib1g-devinstallé la bibliothèque:

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

(Je tire cela de ce lien .)

Michael
la source

Réponses:

171

J'ai eu exactement la même erreur, et comme vous, l'installation de zlib1g-dev ne l'a pas corrigée. L'installation de lib32z1-dev m'a fait passer. J'ai un système 64 bits et il semble qu'il voulait la bibliothèque 32 bits.

Kylefinn
la source
25
Cela fonctionnait ici avec libz-dev (paquet virtuel pour zlib1g-dev) sur Kubuntu 12.04 x64.
Qsiris
10
M'a également aidé à installer / construire lxml-3.4.0 pour Python via pip sur Ubuntu 14.04 LTS / trusty. Merci!
Marian
117

Pour une installation x64 zlib1g-dev.

sudo apt-get install zlib1g-dev

Je n'ai pas besoin de toutes les bibliothèques x86;)

Phedoreanu
la source
9
peut confirmer que cela a fonctionné pour installer lxml via pip sur ubuntu 14.04
mwjackson
2
même chose pour moi que pour mwjackson, même si je suis arrivé zlib1g-devvia le métapaquet libz-dev, comme cela a été suggéré dans une autre réponse.
mknaf
1
Si cela ne fonctionne pas, essayez la version statique zlib-static.
DearVolt
3
Confirmé sur amd64 Ubuntu 18.04 LTS, Bionic Beaver
deinerson1
52

sudo apt-get install libz-dev dans ubuntu.

Siva mbigai M
la source
2
Quelqu'un pourrait-il expliquer pourquoi est-ce nécessaire? J'ai pu installer python-lxml dans un environnement virtuel UNIQUEMENT après avoir installé ce package. Cependant, si j'essayais de l'installer globalement, je n'aurais aucun problème. : \
cballenar
Pas certain de ce cas spécifiquement, mais python-lxmlnécessite largement une logique contenue dans la bibliothèque zlib qu'elle ne peut pas ou ne se fournit tout simplement pas. S'il ne peut pas atteindre la bibliothèque, soit parce qu'il manque, soit parce qu'il y a une barrière d'autorisations, il ne pourra pas construire / fonctionner.
ti7
@cballenar: Réponse courte: dépendances ! python-lxmldépend de tout package qui Provides: libz-dev. Les programmes C / C ++ sont compilés et liés à des bibliothèques qui fournissent des fonctions, des routines et des structures de données. Les systèmes Unix utilisent .so, .a, les .lafichiers et l' utilisation de Windows .dll. Ce sont des fichiers de bibliothèque partagée compilés, qui contiennent des routines avec lesquelles d'autres programmes peuvent se lier et utiliser pour implémenter certaines fonctionnalités. Pour cet exemple: libzimplémente les fonctions de compression et de décompression des données.
TrinitronX
@cballenar: Longue réponse / détails ( partie 1 ): libz-devest un paquet virtuel sur Ubuntu (vérifiez-le sur votre système avec :) apt show libz-dev. L'autre package zlib1g-devfournit libz-dev, qui inclut le fichier de bibliothèque partagée /usr/lib/x86_64-linux-gnu/libz.a, et les fichiers d'en-tête C /usr/include/zconf.h & /usr/include/zlib.h. Vous pouvez afficher le contenu du package avec:, dpkg -L zlib1g-devqui affiche tous les fichiers qu'il contient.
TrinitronX
@cballenar: Réponse longue ( partie 2 ): Comme mentionné, libz-dev( également dans Debian ) est fourni par zlib1g-devvia la Provides: libz-devligne Debian Package dans le fichier du paquet source Debian debian/control . C'est ainsi que le aptgestionnaire d'empaquetage sait résoudre la python-lxmldépendance de package virtualenv à la compilation sur libz-devvia zlib1g-dev.
TrinitronX
31

Je viens de rencontrer ce problème et contrairement à la solution acceptée de "vos fichiers de création sont cassés" et "les inclusions d'hôte ne doivent jamais être incluses dans une compilation croisée"

La version Android comprend de nombreux exécutables hôtes utilisés par le SDK pour créer une application Android. Dans mon cas, le make s'est arrêté lors de la construction de zipalign, qui est utilisé pour optimiser un apk avant de l'installer sur un appareil Android.

L'installation de lib32z1-dev a résolu mon problème, sous Ubuntu, vous pouvez l'installer avec la commande suivante:

sudo apt-get install lib32z1-dev
Adam
la source
8

J'ai eu exactement la même erreur, l'installation de zlib-devel a résolu mon problème, tapez la commande et installez le package zlib.

Sur Linux:

sudo apt-get install zlib*

Sur Centos:

sudo yum install zlib*
Km Abhi
la source
4

Cela signifie que vous lui avez demandé d'inclure la bibliothèque 'libz.a' ou 'libz.so' contenant un package de compression, et bien que le compilateur ait trouvé certains fichiers, aucun d'entre eux n'était adapté à la construction que vous utilisez.

Vous devez soit modifier vos paramètres de construction, soit installer la bibliothèque appropriée, soit spécifier l'emplacement de la bibliothèque appropriée sur la ligne de commande de liaison avec une -L/where/it/is/liboption de type.

Jonathan Leffler
la source
4

Une autre cause possible: vous avez passé --static à l'éditeur de liens, mais vous n'avez qu'une version dynamique de libz (libz.so), mais pas une version qui peut être liée statiquement (libz.a).

jhclark
la source
4

Essayez l'une de ces trois solutions. Ça doit marcher :):

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

En fait, ce qui manque, ce n'est pas la lzcommande, mais les fichiers de développement de la zlibbibliothèque, vous devez donc installer zlib1g-devlib for ex pour l'obtenir.

Pour les systèmes comme rhel7, le package est zlib-devel

DINA TAKLIT
la source
3

Cela vous montrera des indices sur les raisons pour lesquelles l'éditeur de liens ne veut pas de la bibliothèque installée:

LD_DEBUG=all make ...

J'ai eu le même problème dans un contexte différent: mon système /lib/libz.so.1 avait des dépendances insatisfaites sur la libc parce que j'essayais de refaire le lien sur une version différente de l'OS.

qneill
la source
1

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

euthygènes
la source