“ / 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
ยังช่วยฉันติดตั้ง / build lxml-3.4.0 สำหรับ Python ผ่าน pip บน Ubuntu 14.04 LTS / เชื่อใจ ขอบคุณ!
แมเรียน

117

zlib1g-devสำหรับการติดตั้ง x64

sudo apt-get install zlib1g-dev

ฉันไม่ต้องการ x86 libs ทั้งหมด;)


9
สามารถยืนยันสิ่งนี้ได้ผลสำหรับการติดตั้ง lxml ผ่าน pip บน Ubuntu 14.04
mwjackson

2
เช่นเดียวกับฉันสำหรับ mwjackson แม้ว่าฉันจะได้รับzlib1g-devผ่าน metapackage 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 .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 Package Provides: libz-devline ในไฟล์ของ Debian source package debian/controlนี่คือวิธีการที่aptผู้จัดการบรรจุภัณฑ์รู้ในการแก้ไขpython-lxmlเวลารวบรวมแพคเกจการพึ่งพา virtualenv บนผ่านlibz-dev zlib1g-dev
TrinitronX

31

ฉันเพิ่งพบปัญหานี้และตรงกันข้ามกับวิธีแก้ปัญหาที่ยอมรับของ "ไฟล์ที่คุณทำเสีย" และ "โฮสต์รวมไม่ควรรวมอยู่ในการรวบรวมข้าม"

บิลด์ android นั้นประกอบไปด้วย host executables ที่ 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

สาเหตุที่เป็นไปได้อีกประการหนึ่ง: คุณผ่าน - คงที่ไปยังตัวเชื่อมโยง แต่คุณมี 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 ที่ไม่พอใจเนื่องจากฉันพยายามเชื่อมโยงกับระบบปฏิบัติการเวอร์ชันอื่น



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.