54

我在我的新 Swift 2.0 项目中使用了一些来自谷歌的外部代码,这些代码在早期版本中需要“libz.dylib”。更新到新的 Xcode / 新的 SDK 后。

Xcode 现在无法导入 libz.dylib 并抛出一些错误

架构 i386 的未定义符号:“_deflate”,引用自:+[GAICompressionUtil gai_dataByCompressingBytes:length:compressionLevel:mode:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o) “_deflateEnd”,引用自:+[GAICompressionUtil gai_dataByCompressingBytes:length:compressionLevel:模式:] 在 libGoogleAnalyticsServices.a(GAICompressionUtil.o) " deflateInit2",引用自:+[GAICompressionUtil gai_dataByCompressingBytes:length:compressionLevel:mode:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o) "_inflate",引用自:+[GAICompressionUtil gai_dataByInflatingBytes:length:isRawData:] in libGoogleAnalyticsServices.a(GAICompressionUtil. o) "_inflateEnd",引用自:+[GAICompressionUtil gai_dataByInflatingBytes:length:isRawData:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o) " inflateInit2 ",引用自:+[GAICompressionUtil gai_dataByInflatingBytes:length:isRawData:] in libGoogleAnalyticsServices.a( GAICompressionUtil.o) ld: 未找到架构 i386 的符号 clang: 错误: 链接器命令失败,退出代码为 1(使用 -v 查看调用)

在“构建阶段”设置中查看可用包时,我可以找到“libz.tbd”,它似乎是 libz.dylib 的替代品。导入此库时,链接器错误保持不变,但我收到此附加警告:

警告:跳过文件'/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.0.sdk/usr/lib/libz.tbd'(意外的文件类型'文本'在框架和库构建阶段)

该怎么办?

4

8 回答 8

114

我有同样的问题。我找到了某种方法。

  1. 转到构建阶段 > 将二进制文件与库链接 > + > 添加其他
  2. 在文件选择窗口中执行“CMD”+Shift+G(转到文件夹)并输入 /usr/lib/
  3. 从 /usr/lib 你可以添加:libz.dylib 等等...
  4. 编译并玩得开心
于 2015-06-13T19:45:26.540 回答
83

libz.dylib 现在可以在 来自 Apple 开发者论坛的 libz.tbd 引用中找到:

对于那些好奇的人,.tbd 文件是新的“基于文本的存根库”,它提供了一个更紧凑的存根库版本供 SDK 中使用,并有助于显着减少其下载大小。

希望更多的文档很快就会出现。

编辑

为了澄清它,我将引用 Guitz 的答案和更新的内容

  1. 转到构建阶段 > 将二进制文件与库链接 > + > 添加其他
  2. 在文件选择窗口中执行“CMD”+Shift+G(转到文件夹)并输入 /usr/lib/
  3. 从 /user/lib 您可以添加:libz.tbd等等...
  4. 编译并玩得开心
于 2015-09-09T12:57:38.323 回答
8

从与二进制文件的链接阶段删除所有动态库 (dylib)。它会自己找到这些库。

于 2015-07-06T08:27:36.577 回答
2

我在objective-c project.ios9.1,xcode7.1中有这个问题

1.转到目标>构建阶段>将二进制文件与库链接> +

2.选择libz.tbd并添加

它对我有用

于 2015-11-09T05:52:01.223 回答
1

libz.dylib 是 Zlib 的动态库,您可以从这里安装 Zlib http://zlib.net/

于 2015-08-17T08:02:10.160 回答
1

您还可以通过添加参数在构建设置lybz.dylib中添加来自“其他链接器标志”-lz

我必须这样做,因为使用从 /usr/lib 引用库的方法,当我将我的应用程序部署到我们的测试人员时,.dylib 库无法解析并导致应用程序在启动时崩溃。

于 2016-05-26T12:33:07.393 回答
0

您可以从位置添加 libz.1.dylib:/usr/lib/

  1. 转到构建阶段 > 将二进制文件与库链接 > + > 添加其他
  2. 在文件选择窗口中执行 CMD+Shift+G(转到文件夹)并键入 /usr/lib/
  3. 从 /user/lib 你可以添加:libz.1.dylib

它对我有用。

于 2015-10-28T06:37:11.733 回答
-2

同时您可以使用以前的SDK。这是我对 libsqlite3 的回答:

https://stackoverflow.com/a/30981161/627794

编辑:(添加链接内容)

打开终端,输入(更改为您想要的库,例如 libz)

locate libsqlite3.dylib

你会发现几个像这样的文件:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libsqlite3.dylib
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libsqlite3.dylib

转到项目的设置 -> 构建阶段 -> 与二进制文件链接。通过单击添加两个文件+,然后单击Add Other。点击Cmd-Shift-G,然后复制粘贴文件路径。单击Open

如果您使用 macports 安装 sqlite3,请/opt/local/lib从构建设置中的库搜索路径中删除。

于 2015-07-03T16:11:20.730 回答