【问题标题】:How to fix "cannot find -lz"如何修复“找不到-lz”
【发布时间】:2022-07-25 11:07:03
【问题描述】:

我正在编写具有 Zlib.h 标头的代码,此标头位于我的代码文件夹中,我使用以下代码编译此代码

gcc -o x xx.c -lz 

但我明白了

/usr/bin/ld: cannot find -lz
collect2: error: ld returned 1 exit status

这发生在我安装在 VBox 中的 Linux 上。 如何解决这个问题。

【问题讨论】:

  • 试试gcc -lz -o x xx.c
  • 同样的问题!
  • 你需要安装zlib
  • @oleva 标头可能根本不包含任何代码,仅包含预定义的宏和函数原型
  • 你检查过zlib site吗?有下载源的链接。

标签: c linux zlib


【解决方案1】:

当您输入gcc foo.c 时,您要求gcc 编译和链接给定的文件。

1。编译

编译包括将源文件转换为目标文件。 这一步需要gcc找到包含的文件,如zlib.h

这一步在系统上似乎是正确的。

注意:您可以要求gcc 只执行此步骤,输入gcc -c foo.c,或者更好的是gcc -Wall -c foo.c

2。链接

一旦创建了目标文件,就需要链接以创建可执行文件。

这一步对你来说失败了:你的链接找不到你的代码需要的已经编译的函数。

使用选项-lz 链接时,您告诉链接器“搜索libz.so 文件以查找缺少的函数`

在当前的 linux 发行版上,您可以安装 libz-dev 之类的软件包,以便在众所周知的地方安装 .so 文件。 (/lib, /usr/lib, /usr/local/lib...)

如果您没有在库搜索路径上安装 libz.so 文件,您可以指定链接器的库在哪里。

例如,如果libz.so/bar/baz 目录,则可以键入gcc foo.c /bar/baz/libz.solibz.a 也一样。


无论如何,您都需要libz.so 文件或至少libz.a 文件

另见What's the difference between .so, .la and .a library files?

【讨论】:

    【解决方案2】:

    尝试安装“zlib1g-dev”。在 Ubuntu 上,以下命令将安装该库。

    sudo apt install zlib1g-dev

    【讨论】:

      猜你喜欢
      • 2011-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 2011-12-10
      • 2019-08-17
      • 2021-11-13
      • 2016-04-03
      相关资源
      最近更新 更多