“/ Usr / bin / ld: tidak dapat menemukan -lz”

172

Saya mencoba mengkompilasi kode sumber Android di bawah Ubuntu 10.04. Saya mendapat pesan kesalahan,

/ usr / bin / ld: tidak dapat menemukan -lz

Bisakah Anda memberi tahu saya bagaimana cara memperbaikinya? Apa cannot find -lzartinya Inilah pesan kesalahan lengkapnya:

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

Dan keluaran versi GCC saya:

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-devPerpustakaan saya sudah diinstal:

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

(Saya mendapatkan itu dari tautan ini .)

michael
sumber

Jawaban:

171

Saya memiliki kesalahan yang sama persis, dan seperti Anda, menginstal zlib1g-dev tidak memperbaikinya. Menginstal lib32z1-dev membuat saya melewatinya. Saya memiliki sistem 64 bit dan sepertinya ingin perpustakaan 32 bit.

kylefinn
sumber
25
Ini bekerja di sini dengan libz-dev (paket virtual untuk zlib1g-dev) di Kubuntu 12.04 x64.
Qsiris
10
Juga membantu saya menginstal / membangun lxml-3.4.0 untuk Python via pip di Ubuntu 14.04 LTS / trusty. Terima kasih!
Marian
117

Untuk instal x64 zlib1g-dev.

sudo apt-get install zlib1g-dev

Saya tidak membutuhkan semua lib x86;)

phedoreanu
sumber
9
dapat mengkonfirmasi ini berfungsi untuk menginstal lxml melalui pip di ubuntu 14.04
mwjackson
2
sama untuk saya seperti untuk mwjackson, meskipun saya zlib1g-devdapat melalui metapackage libz-dev, seperti yang disarankan dalam jawaban lain.
mknaf
1
Jika ini tidak berhasil, coba versi statis zlib-static.
DearVolt
3
Dikonfirmasi pada amd64 Ubuntu 18.04 LTS, Bionic Beaver
deinerson1
52

sudo apt-get install libz-dev di ubuntu.

Siva mbigai M
sumber
2
Bisakah seseorang menjelaskan mengapa ini perlu? Saya dapat menginstal python-lxml di lingkungan virtual saja setelah menginstal paket ini. Namun jika saya mencoba menginstalnya secara global, saya tidak akan memiliki masalah sama sekali. : \
cballenar
Tidak yakin tentang kasus itu secara khusus, tetapi secara luas python-lxmlmembutuhkan logika yang terkandung dalam pustaka zlib yang tidak dapat atau tidak disediakannya. Jika tidak dapat mencapai pustaka, baik karena itu hilang atau beberapa perizinan izin, itu tidak akan dapat membangun / berfungsi.
ti7
@cballenar: Jawaban singkat: Ketergantungan ! python-lxmltergantung paket apa saja itu Provides: libz-dev. Program C / C ++ dikompilasi dan dihubungkan dengan pustaka yang menyediakan fungsi, rutinitas, & struktur data. Sistem Unix menggunakan .so, .a, .lafile & Jendela digunakan .dll. Ini adalah file perpustakaan bersama yang dikompilasi, yang berisi rutinitas yang dapat ditautkan oleh program lain dan digunakan untuk mengimplementasikan beberapa fungsionalitas. Untuk contoh ini: libzmengimplementasikan fungsi kompresi & dekompresi data .
TrinitronX
@cballenar: Jawaban / detail panjang ( bagian 1 ): libz-devadalah paket virtual di Ubuntu (verifikasi ini di sistem Anda dengan :) apt show libz-dev. Paket lainnya zlib1g-devmenyediakan libz-dev, yang termasuk file perpustakaan bersama /usr/lib/x86_64-linux-gnu/libz.a, dan file C Header /usr/include/zconf.h & /usr/include/zlib.h. Anda dapat melihat konten paket dengan:, dpkg -L zlib1g-devyang menunjukkan semua file yang dikandungnya.
TrinitronX
@cballenar: Jawaban panjang ( bagian 2 ): Sebagaimana disebutkan, libz-dev( juga dalam bahasa Debian ) disediakan oleh zlib1g-devmelalui Provides: libz-devbaris Paket Debian dalam file paket sumber Debian debian/control . Ini adalah bagaimana aptmanajer pengemasan tahu untuk menyelesaikan python-lxmlketergantungan pada paket virtualenv saat kompilasi libz-devmelalui zlib1g-dev.
TrinitronX
31

Saya baru saja mengalami masalah ini dan bertentangan dengan solusi yang diterima dari "file make Anda rusak" dan "host tidak boleh dimasukkan dalam kompilasi silang"

Android build menyertakan banyak executable host yang digunakan oleh SDK untuk membangun aplikasi android. Dalam kasus saya, make dihentikan saat membuat zipalign, yang digunakan untuk mengoptimalkan apk sebelum menginstal pada perangkat android.

Menginstal lib32z1-dev memecahkan masalah saya, di bawah Ubuntu Anda dapat menginstalnya dengan perintah berikut:

sudo apt-get install lib32z1-dev
Adam
sumber
8

Saya memiliki kesalahan yang sama persis, Menginstal zlib-devel memecahkan masalah saya, Ketikkan perintah dan instal paket zlib.

Di linux:

sudo apt-get install zlib*

Di Centos:

sudo yum install zlib*
Abhi km
sumber
4

Ini berarti Anda memintanya untuk memasukkan pustaka 'libz.a' atau 'libz.so' yang berisi paket kompresi, dan meskipun kompiler menemukan beberapa file, tidak ada yang cocok untuk build yang Anda gunakan.

Anda perlu mengubah parameter build Anda atau Anda perlu menginstal pustaka yang benar atau Anda perlu menentukan di mana pustaka yang benar pada baris perintah tautan dengan -L/where/it/is/libopsi jenis.

Jonathan Leffler
sumber
4

Kemungkinan penyebab lain: Anda telah melewatkan --static ke linker, tetapi Anda hanya memiliki versi dinamis libz (libz.so), tetapi bukan versi yang dapat dihubungkan secara statis (libz.a).

jhclark
sumber
4

Coba salah satu dari tiga solusi itu. Ini harus bekerja :):

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

Sebenarnya apa yang hilang bukanlah lzperintah, tetapi file pengembangan untuk zlibperpustakaan. Jadi Anda harus menginstal zlib1g-devlib untuk mantan untuk mendapatkannya.

Untuk sistem seperti rhel7 paketnya adalah zlib-devel

DINA TAKLIT
sumber
3

Ini akan menunjukkan kepada Anda petunjuk tentang mengapa tautan tidak menginginkan pustaka yang diinstal:

LD_DEBUG=all make ...

Saya memiliki masalah yang sama dalam konteks yang berbeda: sistem saya /lib/libz.so.1 memiliki dependensi yang tidak puas pada libc karena saya mencoba untuk menautkan kembali pada versi OS yang berbeda.

Qneill
sumber
1

untuk opensuse 12.3 (Dartmouth) (i586) sudo zypper instal zlib-devel zlib-devel-static

euthygenes
sumber