Mùi / usr / bin / ld: không thể tìm thấy -lz


172

Tôi đang cố gắng biên dịch mã nguồn Android trong Ubuntu 10.04. Tôi nhận được một lỗi nói rằng,

/ usr / bin / ld: không thể tìm thấy -lz

Bạn có thể vui lòng cho tôi biết làm thế nào tôi có thể sửa chữa nó? Có cannot find -lznghĩa là gì? Đây là thông báo lỗi đầy đủ:

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

Và đầu ra phiên bản GCC của tôi:

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.

Tôi đã zlib1g-devcài đặt thư viện:

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

(Tôi hiểu điều đó từ liên kết này .)

Câu trả lời:


171

Tôi đã có cùng một lỗi chính xác, và giống như bạn, cài đặt zlib1g-dev đã không sửa nó. Cài đặt lib32z1-dev đã giúp tôi vượt qua nó. Tôi có một hệ thống 64 bit và có vẻ như nó muốn thư viện 32 bit.


25
Nó hoạt động ở đây với libz-dev (gói ảo cho zlib1g-dev) trên Kubfox 12.04 x64.
Qsiris

10
Cũng giúp tôi cài đặt / xây dựng lxml-3.4.0 cho Python thông qua pip trên Ubuntu 14.04 LTS / đáng tin cậy. Cảm ơn!
Mary

117

Để cài đặt x64 zlib1g-dev.

sudo apt-get install zlib1g-dev

Tôi không cần tất cả các lib x86;)


9
có thể xác nhận điều này đã hoạt động để cài đặt lxml qua pip trên
ubfox

2
tương tự đối với tôi như đối với mwjackson, mặc dù tôi đã vượt zlib1g-devqua được siêu dữ liệu libz-dev, như đã được đề xuất trong một câu trả lời khác.
mknaf

1
Nếu điều này không hoạt động, hãy thử phiên bản tĩnh zlib-static.
DearVolt

3
Xác nhận trên amd64 Ubuntu 18.04 LTS, Bionic Beaver
deinerson1

52

sudo apt-get install libz-dev trong Ubuntu.


2
Ai đó có thể làm sáng tỏ lý do tại sao điều này là cần thiết? Tôi đã có thể cài đặt python-lxml trong môi trường ảo CHỈ sau khi cài đặt gói này. Tuy nhiên nếu tôi cố gắng cài đặt nó trên toàn cầu, tôi sẽ không gặp vấn đề gì cả. : \
cballenar

Không chắc chắn về trường hợp đó một cách cụ thể, nhưng rộng rãi python-lxmlđòi hỏi logic có trong thư viện zlib mà nó không thể hoặc đơn giản là không cung cấp chính nó. Nếu nó không thể đến thư viện, vì nó bị thiếu hoặc một số rào cản quyền, nó sẽ không thể xây dựng / chức năng.
ti7

@cballenar: Câu trả lời ngắn gọn: Phụ thuộc ! python-lxmlphụ thuộc vào bất kỳ gói phần mềm đó Provides: libz-dev. Các chương trình C / C ++ được biên dịch và liên kết với các thư viện cung cấp các hàm, thói quen và cấu trúc dữ liệu. Hệ thống Unix sử dụng .so, .a, .lafile & Windows sử dụng .dll. Chúng được biên dịch các tệp thư viện chia sẻ, chứa các thường trình mà các chương trình khác có thể liên kết và sử dụng để thực hiện một số chức năng. Trong ví dụ này: libzthực hiện các chức năng nén và giải nén dữ liệu .
TrinitronX

@cballenar: Câu trả lời dài / chi tiết ( phần 1 ): libz-devgói ảo trên Ubuntu (xác minh điều này trên hệ thống của bạn bằng apt show libz-dev:). Các gói phần mềm khác zlib1g-devcung cấp libz-dev, trong đó bao gồm các tập tin thư viện chia sẻ /usr/lib/x86_64-linux-gnu/libz.a, và các tập tin C header /usr/include/zconf.h & /usr/include/zlib.h. Bạn có thể xem nội dung gói với : dpkg -L zlib1g-dev, hiển thị tất cả các tệp chứa trong đó.
TrinitronX

@cballenar: Long trả lời ( phần 2 ): Như đã đề cập, libz-dev( cũng trong Debian ) được cung cấp bởi zlib1g-devqua Debian Package Provides: libz-devdòng trong nguồn gói của Debian debian/control tập tin. Đây là cách người aptquản lý đóng gói biết để giải quyết sự python-lxmlphụ thuộc gói virtualenv thời gian biên dịch libz-devqua zlib1g-dev.
TrinitronX

31

Tôi vừa gặp phải vấn đề này và trái với giải pháp được chấp nhận là "tệp tạo của bạn bị hỏng" và "bao gồm máy chủ không bao giờ được đưa vào một biên dịch chéo"

Bản dựng android bao gồm nhiều tệp thực thi máy chủ được SDK sử dụng để xây dựng ứng dụng Android. Trong trường hợp của tôi, việc dừng lại trong khi xây dựng zipalign, được sử dụng để tối ưu hóa apk trước khi cài đặt trên thiết bị Android.

Cài đặt lib32z1-dev đã giải quyết vấn đề của tôi, trong Ubuntu bạn có thể cài đặt nó bằng lệnh sau:

sudo apt-get install lib32z1-dev

8

Tôi đã có cùng một lỗi chính xác, Cài đặt zlib-devel đã giải quyết vấn đề của tôi, Nhập lệnh và cài đặt gói zlib.

Trên linux:

sudo apt-get install zlib*

Trên Centos:

sudo yum install zlib*

4

Điều đó có nghĩa là bạn đã yêu cầu nó bao gồm thư viện 'libz.a' hoặc 'libz.so' chứa gói nén và mặc dù trình biên dịch tìm thấy một số tệp, không có tệp nào phù hợp với bản dựng bạn đang sử dụng.

Bạn cần phải thay đổi các tham số xây dựng của mình hoặc bạn cần cài đặt đúng thư viện hoặc bạn cần chỉ định vị trí thư viện chính xác trên dòng lệnh liên kết với -L/where/it/is/libtùy chọn loại.


4

Một nguyên nhân có thể khác: Bạn đã chuyển --static cho trình liên kết, nhưng bạn chỉ có phiên bản động của libz (libz.so), nhưng không phải là phiên bản có thể được liên kết tĩnh (libz.a).


4

Hãy thử một trong ba giải pháp đó. Nó phải hoạt động :):

  1. sudo apt-get cài đặt zlib1g-dev
  2. sudo apt-get cài đặt libz-dev
  3. sudo apt-get cài đặt lib32z1-dev

Trong thực tế những gì còn thiếu không phải là lzlệnh, mà là các tệp phát triển cho zlibthư viện. Vì vậy, bạn nên cài đặt zlib1g-devlib cho ex để lấy nó.

Đối với các hệ thống như rrc7, gói là zlib-devel


3

Điều này sẽ cho bạn thấy manh mối về lý do tại sao trình liên kết không muốn thư viện được cài đặt:

LD_DEBUG=all make ...

Tôi gặp vấn đề tương tự trong một bối cảnh khác: hệ thống của tôi /lib/libz.so.1 có sự phụ thuộc không thỏa mãn vào libc vì tôi đang cố gắng xem lại một phiên bản HĐH khác.


1

cho opensuse 12.3 (Dartmouth) (i586) sudo zypper cài đặt zlib-devel zlib-devel-static


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.