"/ Usr / bin / ld: не вдається знайти -lz"


172

Я намагаюся зібрати вихідний код Android під Ubuntu 10.04. Я отримую помилку, кажучи:

/ usr / bin / ld: не вдається знайти -lz

Скажіть, будь ласка, як я можу це виправити? Що cannot find -lzозначає? Ось повне повідомлення про помилку:

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

І вихід моєї версії 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.

У мене вже встановлена zlib1g-devбібліотека:

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

(Я отримую це за цим посиланням .)

Відповіді:


171

У мене була точно така ж помилка, і, як і ви, встановлення zlib1g-dev не виправило її. Встановлення lib32z1-dev змусило мене пройти повз нього. У мене 64-бітна система і, схоже, вона хотіла 32-бітну бібліотеку.


25
Тут він працював з libz-dev (віртуальний пакет для zlib1g-dev) на Kubuntu 12.04 x64.
Qsiris

10
Також мені допоміг встановити / створити lxml-3.4.0 для Python через pip на Ubuntu 14.04 LTS / trusty. Дякую!
Маріан

117

Для встановлення x64 zlib1g-dev.

sudo apt-get install zlib1g-dev

Мені не потрібні всі ліцензії x86;)


9
можна підтвердити, що це працювало на встановлення lxml через pip на ubuntu 14.04
mwjackson

2
для мене те саме, що і для mwjackson, хоча я потрапив zlib1g-devчерез метапакет libz-dev, як було запропоновано в іншій відповіді.
mknaf

1
Якщо це не працює, спробуйте статичну версію zlib-static.
DearVolt

3
Підтверджено amd64 Ubuntu 18.04 LTS, Bionic Beaver
deinerson1

52

sudo apt-get install libz-dev в ubuntu.


2
Чи може хтось пролити трохи світла, для чого це потрібно? Мені вдалося встановити python-lxml у віртуальному середовищі ТІЛЬКИ після встановлення цього пакету. Однак якби я спробував встановити його в усьому світі, я б взагалі не мав жодних проблем. : \
cballenar

Не конкретно щодо цього випадку конкретно, але в цілому python-lxmlпотрібна логіка, що міститься в бібліотеці zlib, яку вона не може або просто не забезпечує. Якщо він не зможе дістатися до бібліотеки, тому що він відсутній чи якийсь бар'єр дозволів, він не зможе створити / функціонувати.
ti7

@cballenar: Коротка відповідь: Залежності ! python-lxmlзалежить від будь-якого пакета, який Provides: libz-dev. Програми C / C ++ складаються та пов'язуються з бібліотеками, які надають функції, підпрограми та структури даних. Системи Unix використовують .so, .a, .laфайли & використання ОС Windows .dll. Це компільовані файли спільної бібліотеки, які містять підпрограми, з якими інші програми можуть пов'язувати та використовувати для реалізації деяких функціональних можливостей. Для цього прикладу: libzреалізує функції стиснення даних та декомпресії даних .
TrinitronX

@cballenar: довга відповідь / деталі ( частина 1 ): libz-devце віртуальний пакет Ubuntu (перевірте це у вашій системі за допомогою :) apt show libz-dev. Інший пакет zlib1g-devнадає libz-dev, який включає спільний файл бібліотеки /usr/lib/x86_64-linux-gnu/libz.aта файли заголовка C /usr/include/zconf.h & /usr/include/zlib.h. Ви можете переглянути вміст пакета за допомогою:, dpkg -L zlib1g-devякий показує всі файли, які він містить.
TrinitronX

@cballenar: Довга відповідь ( частина 2 ): Як згадувалося, libz-dev( також у Debian ) надається за zlib1g-devдопомогою Provides: libz-devрядка пакета Debian у debian/control файлі вихідного пакету Debian . Ось як aptменеджер упаковки знає вирішити python-lxmlзалежність пакета від virtulalenv від часу компіляції від libz-devvia zlib1g-dev.
TrinitronX

31

Я щойно зіткнувся з цією проблемою, і всупереч прийнятому рішенню "ваші файли створення порушені", і "хост включає ніколи не повинен включатися в перехресну компіляцію"

Збірка Android включає багато виконуваних файлів хостів, які SDK використовує для створення програми для Android. У моєму випадку make зупиняється під час створення zipalign, який використовується для оптимізації apk перед встановленням на пристрої Android.

Встановлення lib32z1-dev вирішило мою проблему, під Ubuntu ви можете встановити її за допомогою наступної команди:

sudo apt-get install lib32z1-dev

8

У мене була така ж помилка. Встановлення zlib-devel вирішило мою проблему, введіть команду та встановіть пакет zlib.

У Linux:

sudo apt-get install zlib*

Про Centos:

sudo yum install zlib*

4

Це означає, що ви попросили його включити бібліотеку 'libz.a' або 'libz.so', що містить пакет стиснення, і хоча компілятор знайшов деякі файли, жоден з них не підходив для збірки, яку ви використовуєте.

Вам або потрібно змінити параметри збірки або вам потрібно встановити правильну бібліотеку, або вам потрібно вказати, де правильна бібліотека знаходиться в командному рядку посилання з -L/where/it/is/libпараметром типу.


4

Інша можлива причина: Ви перейшли --static до лінкера, але у вас є лише динамічна версія libz (libz.so), але не версія, яка може бути статично пов'язана (libz.a).


4

Спробуйте один із цих трьох рішень. Це має працювати :):

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

Насправді цього не вистачає - це не lzкоманда, а файли розробки для zlibбібліотеки. Отже, вам слід встановити zlib1g-devlib для ex, щоб отримати її.

Для таких систем як rhel7 пакет є zlib-devel


3

Це покаже вам підказки про те, чому лінкер не хоче встановленої бібліотеки:

LD_DEBUG=all make ...

У мене була така ж проблема в іншому контексті: у моїй системі /lib/libz.so.1 були незадоволені залежності від libc, оскільки я намагався повторно зв’язати іншу версію ОС.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.