架构 i386 的未定义符号:“_deflate”,引用自 libMo.a 中的 PlatCompress(enumCompressOperation, CompressCookie*, void*,

Posted

技术标签:

【中文标题】架构 i386 的未定义符号:“_deflate”,引用自 libMo.a 中的 PlatCompress(enumCompressOperation, CompressCookie*, void*, long)【英文标题】:Undefined symbols for architecture i386: "_deflate", referenced from PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a 【发布时间】:2013-08-05 21:18:12 【问题描述】:

我正在使用 SUP 做原生 ios 应用程序。根据文档;我已经包含了库并在 Xcode 中给出了链接路径。 构建时出现以下错误:

Undefined symbols for architecture i386:
  "_deflate", referenced from:
      PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in         libMo.a(tlplatcompress.o)
  "_deflateEnd", referenced from:
      PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
  "_deflateInit_", referenced from:
      StartCompression(enumCompressOperation, unsigned char, long (*)(void*, void*, long), void*, void**) in libMo.a(tlplatcompress.o)
  "_deflateParams", referenced from:
      StartCompression(enumCompressOperation, unsigned char, long (*)(void*, void*, long), void*, void**) in libMo.a(tlplatcompress.o)
  "_inflate", referenced from:
      PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
  "_inflateEnd", referenced from:
      PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
  "_inflateInit_", referenced from:
      StartCompression(enumCompressOperation, unsigned char, long (*)(void*, void*,  long), void*, void**) in libMo.a(tlplatcompress.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

请帮我解决这个错误。我是使用 SUP 进行原生 iOS 开发的新手。

谢谢。

【问题讨论】:

Error:Apple Mach-O Linker (Id) Warning的可能重复 从这里获得 sol(现在没有构建错误):***.com/questions/7752127/… 谢谢。 【参考方案1】:

我也遇到了同样的错误。

libz.dylib 从目标添加到框架 -> 构建阶段选项卡 -> 将二进制文件与库链接,

希望对你有用。

注意:如果未找到 libz.dylib,请尝试添加 libz.tbd

【讨论】:

什么是 libz.dylib 以及它有什么作用? 在 Xcode7、iOS 9.1 上为我工作。我缺少的库是 libz.tbd 和 libsqlite3.tbd 没有 "libz.dylib" 但添加 libz.tbd 并且可以工作:) 感谢@Dhaval 的回答。您还可以帮我了解什么是 libz.tbd 以及它是如何解决这个问题的。 @GJDK libz 是一个用于压缩和解压缩功能的库。以上符号_deflate、_inflate等均来自该库。【参考方案2】:

从 Xcode 7 开始,您应该这样做,而不是添加 libz.dylib:

转到项目Build Settings 选项卡 搜索Other Linker Flags 添加-lz 作为链接器标志(见屏幕截图) 在重新构建之前,在Product 菜单中选择Clean

【讨论】:

非常感谢,你救了我的命 :) 在 Xcode 8.2.1 中遇到同样的问题,用于在应用程序中添加自定义框架......请帮助 请说明为什么这样可以解决问题。 @ChuckKrutsinger 我知道ld 的手册解释了-l[x] 标志告诉链接器如何找到lib[x].dylib(在本例中为libz.dylib)。比我更了解这个问题的人应该添加一个解释。在此处的其他答案不起作用后,我偶然发现了解决方案,并发布了我所做的。 对于 Xcode 9 仍然适用。使用标志或添加框架都可以。【参考方案3】:

架构 i386 的未定义符号:

  "_deflate", referenced from:
      PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in         libMo.a(tlplatcompress.o)
  "_deflateEnd", referenced from:
      PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
  "_deflateInit_", referenced from:
      StartCompression(enumCompressOperation, unsigned char, long (*)(void*, void*, long), void*, void**) in libMo.a(tlplatcompress.o)
  "_deflateParams", referenced from:
      StartCompression(enumCompressOperation, unsigned char, long (*)(void*, void*, long), void*, void**) in libMo.a(tlplatcompress.o)
  "_inflate", referenced from:
      PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
  "_inflateEnd", referenced from:
      PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
  "_inflateInit_", referenced from:
      StartCompression(enumCompressOperation, unsigned char, long (*)(void*, void*,  long), void*, void**) in libMo.a(tlplatcompress.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我也有同样的问题,我认为你没有包含 libz.dylib 库

这样做:

    转到目标部分 构建阶段选项卡 将二进制文件与库链接 点击+按钮 搜索 libz.dylib 点击添加按钮。

【讨论】:

很好的回答。深层思想。谢谢【参考方案4】:

1.转到目标部分

2.构建阶段选项卡

3.将二进制文件与库链接

4.点击+按钮

5.搜索 libz.tbd(或 libz.dylib)

6.点击添加按钮。

【讨论】:

你的答案与其他答案没有什么不同,那你为什么要发布它? 我所做的唯一区别是“5.search libz.tbd(或 libz.dylib)”我认为 libz.tbd 是 libz.dylib 的新名称

以上是关于架构 i386 的未定义符号:“_deflate”,引用自 libMo.a 中的 PlatCompress(enumCompressOperation, CompressCookie*, void*,的主要内容,如果未能解决你的问题,请参考以下文章

Sharekit - 架构 i386 的未定义符号:

架构 i386 的未定义符号:“_SCNetworkReachabilitySetCallback”

架构 i386 的未定义符号 - Lipo 错误?

“架构 i386 的未定义符号”问题

架构 i386 的未定义符号:_FlutterMethodNotImplemented

架构 i386 的未定义符号:用于 OpenCV 项目