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

时间:2010-07-30 17:34:21

标签: linux gcc linker

我正在尝试在Ubuntu 10.04下编译Android源代码。我收到一个错误说,

  

/ 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.

(我从this link得到了。)

12 个答案:

答案 0 :(得分:160)

我有完全相同的错误,和你一样,安装zlib1g-dev并没有解决它。安装lib32z1-dev让我超越它。我有一个64位系统,似乎它想要32位库。

答案 1 :(得分:94)

对于x64,只需安装zlib1g-dev。

sudo apt-get install zlib1g-dev

我不需要所有的x86库;)

答案 2 :(得分:46)

ubuntu中的

sudo apt-get install libz-dev

答案 3 :(得分:31)

我刚刚遇到这个问题而且与“你的make文件坏了”和“主机包含永远不应该包含在交叉编译中”的公认解决方案相悖了

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

安装lib32z1-dev解​​决了我的问题,在Ubuntu下你可以使用以下命令安装它:

sudo apt-get install lib32z1-dev

答案 4 :(得分:5)

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

在linux上:

sudo apt-get install zlib*

On Centos:

sudo yum install zlib*

答案 5 :(得分:4)

这意味着你要求它包含包含压缩包的库'libz.a'或'libz.so',尽管编译器找到了一些文件,但它们都不适合你正在使用的构建。

您需要更改构建参数,或者需要安装正确的库,或者需要使用-L/where/it/is/lib类型选项指定链接命令行上正确库的位置。

答案 6 :(得分:4)

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

答案 7 :(得分:2)

这将向您展示链接器不希望安装库的原因:

LD_DEBUG=all make ...

我在不同的上下文中遇到了同样的问题:我的系统/lib/libz.so.1对libc的依赖性不满意,因为我试图重新链接不同版本的操作系统。

答案 8 :(得分:1)

for opensuse 12.3(达特茅斯)(i586) sudo zypper install zlib-devel zlib-devel-static

答案 9 :(得分:0)

其他人提到lib32z-dev解​​决了这个问题,但一般来说可以在这里找到所需的包:

http://source.android.com/source/initializing.html 请参阅“安装所需的软件包”

答案 10 :(得分:0)

只想补充一点:

尝试安装提拉米苏Sub模块(安装Halide)后,出现类似错误 错误是

read -lz -o bin/libHalide.so
/usr/bin/ld:  cannot find -lz 

做共享@phedoreanu的事情来修复我的铅。

sudo apt-get install zlib1g-dev

因此即使您在提拉米苏的安装中出现此错误,也不必担心,这是他们的良药;)。

答案 11 :(得分:0)

尝试这三种解决方案之一。它必须工作:):

  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 lib for ex来获取它。