207 votes

"/usr/bin/ld : ne peut pas trouver -lz"

J'essaie de compiler le code source d'Android sous Ubuntu 10.04. J'obtiens une erreur disant ,

/usr/bin/ld : ne peut pas trouver -lz

Pouvez-vous me dire comment je peux le réparer ? Que fait cannot find -lz signifie ? 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à le zlib1g-dev bibliothèque installée :

$ 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 tiens cela de ce lien .)

184voto

RainMan002 Points 863

J'ai eu exactement la même erreur, et comme vous, l'installation de zlib1g-dev n'a pas résolu le problème. L'installation de lib32z1-dev m'a permis de la résoudre. J'ai un système 64 bits et il semble qu'il voulait la bibliothèque 32 bits.

27 votes

Cela a fonctionné ici avec libz-dev (paquet virtuel pour zlib1g-dev) sur Kubuntu 12.04 x64.

10 votes

Il m'a également aidé à installer/construire lxml-3.4.0 pour Python via pip sur Ubuntu 14.04 LTS/trusty. Merci !

171voto

phedoreanu Points 120

Pour l'installation x64 zlib1g-dev .

sudo apt-get install zlib1g-dev

Je n'ai pas besoin de toutes les librairies x86 ;)

11 votes

Je peux confirmer que cela a fonctionné pour installer lxml via pip sur ubuntu 14.04

2 votes

La même chose pour moi que pour mwjackson, bien que j'aie obtenu zlib1g-dev via le métapackage libz-dev comme cela a été suggéré dans une autre réponse.

2 votes

Si cela ne fonctionne pas, essayez la version statique zlib-static .

59voto

Siva mbigai M Points 1

sudo apt-get install libz-dev dans ubuntu.

2 votes

Quelqu'un pourrait-il m'éclairer sur la raison de cette nécessité ? J'ai pu installer python-lxml dans un environnement virtuel UNIQUEMENT après avoir installé ce paquet. Cependant, si j'essayais de l'installer globalement, je n'aurais aucun problème :-)

0 votes

Je ne suis pas certain de cette affaire en particulier, mais en général python-lxml nécessite une logique contenue dans la bibliothèque zlib qu'il ne peut pas ou ne fournit pas lui-même. S'il ne peut pas atteindre la bibliothèque, soit parce qu'elle est manquante, soit à cause d'une barrière de permissions, il sera incapable de construire/fonctionner.

1 votes

@cballenar : Réponse courte : Dépendances ! python-lxml dépend de tout paquet 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 , .la fichiers et utilisation de Windows .dll . Ce sont des fichiers de bibliothèque partagée compilés, qui contiennent des routines que d'autres programmes peuvent lier et utiliser pour implémenter certaines fonctionnalités. Pour cet exemple : libz met en œuvre compression et décompression des données fonctions.

35voto

Adam Points 161

Je viens de rencontrer ce problème et contrairement à la solution acceptée de "vos fichiers make sont cassés" et "les includes de l'hôte ne devraient jamais être inclus dans une compilation croisée".

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

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

sudo apt-get install lib32z1-dev

0 votes

Merci, cela a fonctionné pour debian.

6voto

Jonathan Leffler Points 299946

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

Vous devez soit modifier vos paramètres de construction, soit installer la bonne bibliothèque, soit spécifier où se trouve la bonne bibliothèque sur la ligne de commande de liaison avec l'option -L/where/it/is/lib option de type.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X