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 -lz
znaczy? 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-dev
zainstalowaną 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 ).
W przypadku instalacji x64
zlib1g-dev
.Nie potrzebuję wszystkich bibliotek x86;)
źródło
zlib1g-dev
przez metapakietlibz-dev
, jak zasugerowano w innej odpowiedzi.zlib-static
.sudo apt-get install libz-dev
w ubuntu.źródło
python-lxml
wymaga 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ć.python-lxml
zależy od dowolnego pakietuProvides: 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
,.la
plikó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:libz
implementuje funkcje kompresji i dekompresji danych .libz-dev
to wirtualny pakiet na Ubuntu (sprawdź to w swoim systemie za pomocą :)apt show libz-dev
. Drugi pakietzlib1g-dev
zapewnialibz-dev
, który zawiera plik biblioteki współdzielonej/usr/lib/x86_64-linux-gnu/libz.a
i pliki nagłówkowe C/usr/include/zconf.h
&/usr/include/zlib.h
. Możesz wyświetlić zawartość pakietu za pomocą:,dpkg -L zlib1g-dev
który pokazuje wszystkie zawarte w nim pliki.libz-dev
( również w Debianie ) jest udostępniana przez wierszzlib1g-dev
pakietu 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/control
apt
python-lxml
libz-dev
zlib1g-dev
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:
źródło
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:
Na Centos:
źródło
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/lib
opcji type.źródło
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).
źródło
Wypróbuj jedno z tych trzech rozwiązań. To musi działać :):
W rzeczywistości brakuje nie
lz
polecenia, ale plików deweloperskich dlazlib
biblioteki, więc powinieneś zainstalowaćzlib1g-dev
lib for ex, aby je uzyskać.Dla systemów podobnych do rhel7 pakiet to
zlib-devel
źródło
To pokaże ci wskazówki, dlaczego konsolidator nie chce zainstalowanej biblioteki:
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.
źródło
for opensuse 12.3 (Dartmouth) (i586) sudo zypper install zlib-devel zlib-devel-static
źródło
Inni wspominali, że lib32z-dev rozwiązuje problem, ale ogólnie wymagane pakiety można znaleźć tutaj:
http://source.android.com/source/initializing.html Zobacz „Instalowanie wymaganych pakietów”
źródło