【问题标题】:"/usr/bin/ld: cannot find -lz"“/usr/bin/ld: 找不到 -lz”
【发布时间】:2011-03-23 09:16:22
【问题描述】:

我正在尝试在 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 那里得到的。)

【问题讨论】:

    标签: linux gcc linker


    【解决方案1】:

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

    【讨论】:

    • 它在 Kubuntu 12.04 x64 上与 libz-dev(zlib1g-dev 的虚拟包)一起工作。
    • 还帮助我在 Ubuntu 14.04 LTS/trusty 上通过 pip 为 Python 安装/构建 lxml-3.4.0。谢谢!
    【解决方案2】:

    对于 x64 安装 zlib1g-dev

    sudo apt-get install zlib1g-dev
    

    我不需要所有的 x86 库;)

    【讨论】:

    • 可以确认这适用于通过 ubuntu 14.04 上的 pip 安装 lxml
    • 对我来说和 mwjackson 一样,尽管我通过元包libz-dev 得到了zlib1g-dev,正如另一个答案中所建议的那样。
    • 如果不行,试试静态版zlib-static
    • 在 amd64 Ubuntu 18.04 LTS、Bionic Beaver 上确认
    • 在编译 maloader 时帮助我安装了 Debian 11
    【解决方案3】:

    sudo apt-get install libz-dev 在 ubuntu 中。

    【讨论】:

    • 有人能解释一下为什么这是必要的吗?只有在安装此软件包后,我才能在虚拟环境中安装 python-lxml。但是,如果我尝试在全球范围内安装它,我根本不会有任何问题。 :\
    • 不确定具体情况,但大致上python-lxml 需要 zlib 库中包含的逻辑,它不能或根本不提供它自己。如果它无法访问库,无论是因为它丢失还是某些权限障碍,它将无法构建/运行。
    • @cballenar :简短回答:Dependencies! python-lxml 依赖于 Provides: libz-dev 的任何包。 C/C++ 程序针对提供函数、例程和数据结构的库进行编译和链接。 Unix 系统使用 .so.a.la 文件和 Windows 使用 .dll。这些是已编译的共享库文件,其中包含其他程序可以链接并用于实现某些功能的例程。对于此示例:libz 实现 data compression & decompression 函数。
    • @cballenar :长答案/详细信息(第 1 部分):libz-dev 是 Ubuntu 上的 virtual package(在您的系统上验证这一点:apt show libz-dev)。另一个包zlib1g-dev提供libz-dev,其中包括共享库文件/usr/lib/x86_64-linux-gnu/libz.aC Header files/usr/include/zconf.h/usr/include/zlib.h。您可以通过dpkg -L zlib1g-dev查看包内容,其中显示了它包含的所有文件。
    • @cballenar : 长答案 (part 2): 如前所述,libz-dev (also in Debian) 是 provided zlib1g-dev 通过 Debian 软件包 @987654348 Debian source package's debian/control 文件中的 @ 行。这就是apt 打包管理器如何知道通过zlib1g-dev 解决python-lxml 编译时virtualenv 包对libz-dev 的依赖。
    【解决方案4】:

    我刚遇到这个问题,与“您的 make 文件已损坏”和“主机包含不应包含在交叉编译中”的公认解决方案相反

    android 构建包含许多主机可执行文件,SDK 使用这些可执行文件构建 android 应用程序。 在我的例子中,make 在构建 zipalign 时停止,它用于在安装到 android 设备上之前优化 apk。

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

    sudo apt-get install lib32z1-dev
    

    【讨论】:

      【解决方案5】:

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

      在 Linux 上:

      sudo apt-get install zlib*
      

      在 Centos 上:

      sudo yum install zlib*
      

      【讨论】:

        【解决方案6】:

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

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

        对于 rhel7 类系统,该软件包是 zlib-devel

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

              这会告诉你为什么链接器不想要安装的库:

              LD_DEBUG=all make ...
              

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

              【讨论】:

                【解决方案10】:

                用于 opensuse 12.3 (Dartmouth) (i586) sudo zypper install zlib-devel zlib-devel-static

                【讨论】:

                  【解决方案11】:

                  其他人提到 lib32z-dev 解决了这个问题,但通常需要的包可以在这里找到:

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

                  【讨论】:

                    猜你喜欢
                    • 2021-05-07
                    • 2014-08-21
                    • 2011-07-16
                    • 2012-05-17
                    • 2020-04-14
                    • 2012-03-26
                    • 2018-12-13
                    • 2015-09-22
                    • 2020-01-19
                    相关资源
                    最近更新 更多