„/ Usr / bin / ld: nie można znaleźć -lz”

172

Próbuję skompilować kod źródłowy Androida pod Ubuntu 10.04. Pojawia się błąd mówiący:

/ usr / bin / ld: nie można znaleźć -lz

Czy możesz mi powiedzieć, jak mam to naprawić? Co to cannot find -lzznaczy? Oto pełny komunikat o błędzie:

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

I wyjście mojej wersji 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.

Mam już zlib1g-devzainstalowaną bibliotekę:

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

(Mam to z tego linku ).

Michael
źródło

Odpowiedzi:

171

Miałem dokładnie ten sam błąd i tak jak Ty, instalacja zlib1g-dev go nie naprawiła. Zainstalowanie lib32z1-dev pozwoliło mi przejść przez to. Mam system 64-bitowy i wygląda na to, że potrzebowałem biblioteki 32-bitowej.

kylefinn
źródło
25
Pracował tutaj z libz-dev (pakiet wirtualny dla zlib1g-dev) na Kubuntu 12.04 x64.
Qsiris
10
Pomogło mi także zainstalować / zbudować lxml-3.4.0 dla Pythona przez pip na Ubuntu 14.04 LTS / trusty. Dzięki!
Marian
117

W przypadku instalacji x64 zlib1g-dev.

sudo apt-get install zlib1g-dev

Nie potrzebuję wszystkich bibliotek x86;)

phedoreanu
źródło
9
mogę potwierdzić, że to zadziałało dla instalacji lxml przez pip na ubuntu 14.04
mwjackson
2
to samo co dla mwjackson, chociaż dostałem się zlib1g-devprzez metapakiet libz-dev, jak zasugerowano w innej odpowiedzi.
mknaf
1
Jeśli to nie zadziała, wypróbuj wersję statyczną zlib-static.
DearVolt
3
Potwierdzono w amd64 Ubuntu 18.04 LTS, Bionic Beaver
deinerson1
52

sudo apt-get install libz-dev w ubuntu.

Siva mbigai M
źródło
2
Czy ktoś mógłby rzucić trochę światła na to, dlaczego jest to konieczne? Mogłem zainstalować python-lxml w środowisku wirtualnym TYLKO po zainstalowaniu tego pakietu. Jednak gdybym spróbował zainstalować go globalnie, nie miałbym żadnego problemu. : \
cballenar
Nie jest pewien konkretnie tego przypadku, ale ogólnie python-lxmlwymaga logiki zawartej w bibliotece zlib, której nie może lub po prostu nie zapewnia. Jeśli nie może uzyskać dostępu do biblioteki, z powodu braku lub bariery uprawnień, nie będzie w stanie zbudować / działać.
ti7
@cballenar: Krótka odpowiedź: Zależności ! python-lxmlzależy od dowolnego pakietu Provides: libz-dev. Programy C / C ++ są kompilowane i łączone z bibliotekami udostępniającymi funkcje, procedury i struktury danych. Systemy Unix użyć .so, .a, .laplików i korzystania z systemu Windows .dll. Są to skompilowane pliki bibliotek współdzielonych, które zawierają procedury, z którymi inne programy mogą się łączyć i których mogą używać do implementacji niektórych funkcji. Na przykład: libzimplementuje funkcje kompresji i dekompresji danych .
TrinitronX
@cballenar: Długa odpowiedź / szczegóły ( część 1 ): libz-devto wirtualny pakiet na Ubuntu (sprawdź to w swoim systemie za pomocą :) apt show libz-dev. Drugi pakiet zlib1g-devzapewnia libz-dev, który zawiera plik biblioteki współdzielonej /usr/lib/x86_64-linux-gnu/libz.ai pliki nagłówkowe C /usr/include/zconf.h & /usr/include/zlib.h. Możesz wyświetlić zawartość pakietu za pomocą:, dpkg -L zlib1g-devktóry pokazuje wszystkie zawarte w nim pliki.
TrinitronX
@cballenar: Długa odpowiedź ( część 2 ): Jak wspomniano, libz-dev( również w Debianie ) jest udostępniana przez wiersz zlib1g-devpakietu Debiana w pliku pakietu źródłowego Debiana . W ten sposób menedżer pakietów wie, aby rozwiązać zależność pakietu virtualenv w czasie kompilacji na via . Provides: libz-dev debian/controlaptpython-lxmllibz-devzlib1g-dev
TrinitronX
31

Właśnie napotkałem ten problem i w przeciwieństwie do przyjętego rozwiązania „Twoje pliki make są zepsute” i „dołączenia hosta nigdy nie powinny być uwzględniane w kompilacji krzyżowej”

Kompilacja systemu Android zawiera wiele plików wykonywalnych hosta używanych przez zestaw SDK do tworzenia aplikacji dla systemu Android. W moim przypadku produkcja zatrzymała się podczas budowania zipalign, który służy do optymalizacji apk przed instalacją na urządzeniu z Androidem.

Zainstalowanie lib32z1-dev rozwiązało mój problem, pod Ubuntu możesz go zainstalować za pomocą następującego polecenia:

sudo apt-get install lib32z1-dev
Adam
źródło
8

Miałem dokładnie ten sam błąd, instalacja zlib-devel rozwiązała mój problem, wpisz polecenie i zainstaluj pakiet zlib.

W systemie Linux:

sudo apt-get install zlib*

Na Centos:

sudo yum install zlib*
Abhi km
źródło
4

Oznacza to, że poprosiłeś o dołączenie biblioteki „libz.a” lub „libz.so” zawierającej pakiet kompresji i chociaż kompilator znalazł kilka plików, żaden z nich nie był odpowiedni dla używanej kompilacji.

Musisz albo zmienić parametry kompilacji, albo musisz zainstalować poprawną bibliotekę lub musisz określić, gdzie znajduje się właściwa biblioteka w wierszu poleceń łącza za pomocą -L/where/it/is/libopcji type.

Jonathan Leffler
źródło
4

Inna możliwa przyczyna: Przekazałeś --static do konsolidatora, ale masz tylko dynamiczną wersję libz (libz.so), ale nie wersję, którą można łączyć statycznie (libz.a).

jhclark
źródło
4

Wypróbuj jedno z tych trzech rozwiązań. To musi działać :):

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

W rzeczywistości brakuje nie lzpolecenia, ale plików deweloperskich dla zlibbiblioteki, więc powinieneś zainstalować zlib1g-devlib for ex, aby je uzyskać.

Dla systemów podobnych do rhel7 pakiet to zlib-devel

DINA TAKLIT
źródło
3

To pokaże ci wskazówki, dlaczego konsolidator nie chce zainstalowanej biblioteki:

LD_DEBUG=all make ...

Miałem ten sam problem w innym kontekście: mój system /lib/libz.so.1 miał niezadowalające zależności od libc, ponieważ próbowałem ponownie połączyć się z inną wersją systemu operacyjnego.

qneill
źródło
1

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

euthygenes
źródło