"/usr/bin/ld: cannot find -lz"

210

我正在尝试在Ubuntu 10.04下编译Android源代码,但是出现了一个错误:

  

/usr/bin/ld: 找不到-lz

请问我该如何修复它? "找不到-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.

(我是从这个链接了解到的。)

11个回答

185

我遇到了完全相同的错误,就像你一样,安装zlib1g-dev未能解决它。安装lib32z1-dev使我成功绕过了这个问题。我的系统是64位,但它似乎需要32位库。


27
我在 Kubuntu 12.04 x64 上使用 libz-dev(zlib1g-dev 的虚拟包)成功运行了它。 - Qsiris
10
也帮我通过pip在Ubuntu 14.04 LTS/trusty上安装/构建了Python的lxml-3.4.0。谢谢! - Marian

174

对于x64安装,请安装zlib1g-dev

sudo apt-get install zlib1g-dev

我不需要所有的x86库 ;)


11
可以确认,在Ubuntu 14.04上使用pip安装lxml是可行的。 - mwjackson
2
对我来说和mwjackson一样,虽然我通过元包libz-dev获取了zlib1g-dev,这是另一个答案中建议的方法。 - mknaf
2
如果这个不起作用,请尝试使用静态版本“zlib-static”。 - DearVolt
3
确认在amd64架构的Ubuntu 18.04 LTS(Bionic Beaver)上。 - deinerson1
1
适用于Ubuntu 20.04。 - Oshanath Rajawasam
显示剩余3条评论

59
在Ubuntu中运行sudo apt-get install libz-dev安装libz-dev。

2
有人能解释一下为什么这是必要的吗?只有在安装了这个包之后,我才能在虚拟环境中安装python-lxml。但是,如果我尝试全局安装它,我根本不会有任何问题。:\ - cballenar
对于这种情况我不是很确定,但是广义上来说,python-lxml 需要包含在 zlib 库中的逻辑,而它本身无法或者根本没有提供。如果它无法访问该库,可能是因为缺少该库或某些权限障碍,那么它将无法构建/运行。 - ti7
1
@cballenar:简短回答:**_依赖关系_!** python-lxml 依赖于任何提供 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.aC头文件/usr/include/zconf.h&/usr/include/zlib.h。您可以使用dpkg -L zlib1g-dev查看软件包内容,该命令显示它所包含的所有文件。 - TrinitronX
@cballenar:长答案(第九部分): 那么,在解压所有这些关于C/C++、包管理器、依赖项、脚本语言及其版本管理器,以及编译和链接时需要的文件和库类型的信息之后... 现在我们终于可以看到为什么Virtualenv安装python-lxml需要在编译链接时使用zlib1g-dev包的 libz.azlib.h 文件了。同时,包管理器版本的python-lxml已经被预编译,因此依赖于libxml2 => zlib1g,并且_不需要_这个*-dev依赖包。 - TrinitronX
显示剩余7条评论

35

我刚遇到了这个问题,与“你的make文件已损坏”和“主机包不应该包含在交叉编译中”的被接受的解决方案相反。

Android构建包括许多主机可执行文件,用于SDK构建Android应用程序。在我的情况下,当构建用于在Android设备上安装APK之前优化APK的zipalign时,制作停止了。

通过安装lib32z1-dev解决了我的问题,在Ubuntu下,您可以使用以下命令进行安装:

sudo apt-get install lib32z1-dev

14

我遇到了完全相同的错误,安装zlib-devel解决了我的问题,请输入命令安装zlib包。

在Linux上:

sudo apt-get install zlib*

在 Centos 上:

sudo yum install zlib*

在Amazon OS上,sudo yum install zlib*解决了我的问题。 - flerka

8
尝试以下三种解决方案之一,肯定会起作用:
  1. sudo apt-get install zlib1g-dev
  2. sudo apt-get install libz-dev
  3. sudo apt-get install lib32z1-dev
实际上缺少的不是 lz 命令,而是 zlib 库的开发文件。因此,您应该安装 zlib1g-dev 类似于这样的库来获取它。
对于类似于 rhel7 的系统,安装包是 zlib-devel

7

可能的另一个原因是:您已将 --static 参数传递给链接器,但您只有动态版本的 libz(libz.so),而没有可以静态链接的版本(libz.a)。


7
这意味着你要求它包含一个压缩包,其中包含库'libz.a'或'libz.so',虽然编译器找到了一些文件,但没有一个适用于你正在使用的构建。你需要更改构建参数,安装正确的库或在链接命令行上指定正确的库位置,例如-L/where/it/is/lib选项。

4
这将向您展示有关链接器不想使用已安装库的线索:
LD_DEBUG=all make ...

我在不同的情境中也遇到了同样的问题:我的系统/lib/libz.so.1因为我试图在一个不同版本的操作系统上重新链接而出现了对libc的未满足依赖性。


2

对于开放SUSE 12.3 (达特茅斯) (i586) 使用以下命令安装zlib-devel和zlib-devel-static: sudo zypper install zlib-devel zlib-devel-static


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接