架构i386的未定义符号:在libMo.a中的PlatCompress(enumCompressOperation, CompressCookie*, void*, long)中引用"_deflate"。

63

我正在使用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开发的新手。

谢谢。


可能是[错误:Apple Mach-O链接器(Id)警告]的重复问题。请参考https://dev59.com/RGsz5IYBdhLWcg3wpZlF。 - Martin R
3
从这里得到了解决方案(现在没有编译错误):https://dev59.com/RGsz5IYBdhLWcg3wpZlF谢谢。 - bapi
4个回答

155

我也遇到了同样的错误。

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

希望对你有用。

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


1
什么是libz.dylib,它有什么作用? - RYFN
6
在Xcode7和iOS 9.1上对我有用。我缺少的库是libz.tbd和libsqlite3.tbd。 - voghDev
2
没有"libz.dylib",但添加"libz.tbd"就可以工作了 :) - torun
谢谢你的回答,@Dhaval。另外,你能帮我理解一下libz.tbd是什么以及它是如何解决这个问题的吗? - GJDK
@GJDK libz是一个用于压缩和解压缩功能的库。上述符号_deflate,_inflate等来自该库。 - Omkar

44

从Xcode 7开始,不再需要添加libz.dylib库文件,您可以按照以下方式进行操作:

  • 前往项目的构建设置选项卡
  • 搜索其他链接器标志
  • -lz作为链接器标志添加(参见截图)
  • 在再次构建之前,在产品菜单中选择清理

lz link option


1
非常感谢,你救了我的命 :) - Sagar In
在Xcode 8.2.1中添加自定义框架到应用程序时遇到了相同的问题...请帮忙。 - SHASHANK
2
请添加解释说明为什么这个方法可以解决问题。 - Chuck Krutsinger
2
@ChuckKrutsinger 我知道 ld 的手册解释了 -l[x] 标志告诉链接器如何找到 lib[x].dylib(在这种情况下是 libz.dylib)。比我更了解这个问题的人应该添加一个解释。在其他答案都不起作用之后,我偶然发现了解决方案,并发布了我的方法。 - Abhi Beckert
仍然适用于Xcode 9。可以使用标志或添加框架来解决。 - Wingzero

19

未定义符号,适用于架构 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库

操作步骤如下:

  1. 进入目标部分
  2. 选择Build Phases选项卡
  3. 在Link Binaries With Libraries中找到
  4. 点击“+”按钮
  5. 搜索libz.dylib
  6. 点击添加按钮

1
回答得非常好。深思熟虑。谢谢。 - Abdul Yasin

12

1.进入目标部分

2.选择“Build Phases”选项卡

3.与库链接二进制文件

4.点击“+”按钮

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

6.点击“添加”按钮。


2
你的回答和其他回答没有什么不同,那你为什么还要发表呢? - Droppy
我所做的唯一更改是“5.搜索libz.tbd(或libz.dylib)”,我认为libz.tbd是libz.dylib的新名称。 - Vinoth Anandan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接