【问题标题】:error when import zlib in iOS: symbol(s) not found collect2: ld在 iOS 中导入 zlib 时出错:找不到符号 collect2:ld
【发布时间】:2010-09-22 07:15:05
【问题描述】:

我在我的 iphone 应用程序中包含了<zlib.h> 以及我正在模拟 Brad Larson 提供的 Molecules 示例代码的源代码,但是,当我构建项目时,它返回如下错误。谁能帮我指出这是图书馆链接问题还是我遗漏了什么?

"_deflate", referenced from: -[NSData(Gzip) gzipDeflate] in NSData+Gzip.o "_inflateEnd", 
referenced from: -[NSData(Gzip) initWithGzippedData:] in NSData+Gzip.o "inflateInit2", 
referenced from: -[NSData(Gzip) initWithGzippedData:] in NSData+Gzip.o "_inflate", 
referenced from: -[NSData(Gzip) initWithGzippedData:] in NSData+Gzip.o "_deflateEnd", 
referenced from: -[NSData(Gzip) gzipDeflate] in NSData+Gzip.o "deflateInit2", referenced 
from: -[NSData(Gzip) gzipDeflate] in NSData+Gzip.o ld: symbol(s) not found collect2: ld 
returned 1 exit status

【问题讨论】:

  • 您是否将 libz 添加到您的项目中?

标签: ios linker zlib


【解决方案1】:

在 Target 的 Build Settings 选项卡中,向下滚动到 Other Linker Flags 部分并确保 -lz 在该字段中。这将链接到内置的 zlib,您的错误应该会消失。

更改链接器标志后,您必须在重新构建之前从Product 菜单中选择Clean

【讨论】:

  • 我觉得杰森的回答是比较靠谱的方法。
  • @Plumenator 在 Ben 的回答中,您使用的 libz 已经是您应用程序的一部分。在 Jason 的回答中,您正在向应用程序添加一个额外的 libz。这就是为什么 Ben 的回答更好,更有效率(当然对 Jason 没有冒犯)。
【解决方案2】:

将 libz 添加到您的项目中。为此,请在 Xcode 中按照以下步骤操作:

  1. 打开您的项目,选择您的项目目标,然后单击工具栏上的蓝色项目信息图标(或按 ⌘I)
  2. 点击屏幕左下角的+按钮添加库,向下滚动到库列表底部,选择libz.dylib;点击添加按钮。
  3. 单击添加后,您将看到库名称出现在链接库的oyur 列表中。您现在可以构建项目而不会出现链接错误。

您可以使用相同的方法从列表中添加任何库。如果该库未出现在列表中,那么您知道它不是标准 iPhone SDK 的一部分,您可能需要重新考虑您的解决方案或自己静态构建库并将您的目标链接到该库(如果可能的话)。

【讨论】:

  • -1 - 虽然这是一个非常好的答案,但当您将库添加到目标时,libz.dylib 不再可用,并且无论如何都不应该将它们用于标准库。而是将-lz 添加到您的链接器标志中。
猜你喜欢
  • 2019-03-13
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多