«/ 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-битную библиотеку.

kylefinn
источник
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;)

phedoreanu
источник
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 в убунту.

Шива МБИГАЙ М
источник
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через Debian пакет Provides: libz-devлинии в пакете исходного кода в Debian debian/control файл. Вот как aptменеджер пакетов знает, как разрешить python-lxmlзависимость пакета virtualenv во время компиляции от libz-devvia zlib1g-dev.
TrinitronX
31

Я только что столкнулся с этой проблемой, и вопреки общепринятому решению «ваши файлы make испорчены» и «включения хоста никогда не должны включаться в кросс-компиляцию»

Сборка 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).

jhclark
источник
4

Попробуйте одно из этих трех решений. Должно работать :)

  1. sudo apt-get установить zlib1g-dev
  2. sudo apt-get установить libz-dev
  3. sudo apt-get установить lib32z1-dev

На самом деле отсутствует не lzкоманда, а файлы для разработки zlibбиблиотеки. Так что вам нужно установить zlib1g-devlib для ex, чтобы получить ее.

Для rhel7-подобных систем пакет zlib-devel

ДИНА ТАКЛИТ
источник
3

Это покажет вам, почему компоновщик не хочет, чтобы установленная библиотека:

LD_DEBUG=all make ...

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

qneill
источник
1

для opensuse 12.3 (Дартмут) (i586) sudo zypper install zlib-devel zlib-devel-static

euthygenes
источник
0

Другие упоминали, что lib32z-dev решает проблему, но в целом необходимые пакеты можно найти здесь:

http://source.android.com/source/initializing.html См. «Установка необходимых пакетов».

Конли Оуэнс
источник