Swift 2 / iOS 9 - 找不到libz.dylib

54
我在新的Swift 2.0项目中使用了一些来自谷歌的外部代码,这些代码在早期版本中需要“libz.dylib”。在更新到新的Xcode / 新的SDK后,Xcode现在无法导入“libz.dylib”并抛出一些错误。
当在“build phase”设置中查找可用软件包时,我可以找到“libz.tbd”,它似乎是“libz.dylib”的替代品。当导入此库时,链接器错误保持不变,但我得到了以下附加警告:
警告:跳过文件“/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.0.sdk/usr/lib/libz.tbd”(框架和库构建阶段中意外的文本文件类型)
该怎么办?

尝试清除产品。如果没有帮助,请删除Xcode缓存和派生数据。 - Leo Dabus
我同意@LeoDabus的建议使用“Product Clear”。作为一个新项目,添加这个tbd(它代表什么?)将会编译成功。 - John Difool
1
我已经清理并重新构建了整个项目 - 问题依旧! - Daniel K.
8个回答

114

我也遇到了同样的问题,但我找到了一种解决方法。

  1. 进入 Build Phases >Link Binary with Librairies > + > Add other
  2. 打开文件选择窗口后按下 "CMD"+Shift+G(跳转至文件夹),并输入 /usr/lib/
  3. 从 /usr/lib 目录下添加:libz.dylib 等库文件
  4. 编译并享受吧!

41
已过时,现在应该使用 libz.tbd。 - swiftyboi
5
或许应该这样做,但在我的Yosemite系统中,即便使用Xcode 7.1.1和.tbd文件仍然不起作用。使用上述解决方案可以在模拟器和设备上生效。 - dogsgod
似乎现在你甚至不需要将它们列在“链接二进制文件和库”列表中,至少在我的情况下,Xcode会自动找到它们。就像下面AZ0的回答一样。 - Alex

84

现在libz.dylib被替换为libz.tbd 来自苹果开发者论坛的引用:

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

希望很快会有更多的文档。

编辑

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

  1. 进入Build Phases >Link Binary with Librairies > + > Add other
  2. 一旦进入文件选择窗口,按下“CMD”+Shift+G(转到文件夹)并键入/usr/lib/
  3. 从/user/lib中添加:libz.tbd等等...
  4. 编译并享受乐趣

3
这应该是第一个答案! - Benjamin Jimenez
2
您提供的链接中说“删除所有对.tbd的引用”,那么在旧版iOS上使用这个是否安全?所以,我们应该使用.tbd还是不使用? - jcesarmobile

8

删除与二进制文件链接阶段的所有动态库(dylib),系统会自动查找这些库。


谢谢!它确实就是这样工作的。对我来说,Xcode 7.2的问题在于模拟器使用.tbd文件,而iPhone设备/存档使用.dylib文件。因此,它抱怨找不到缺失的库。 - Dalibor Filus
在我的情况下,简单地移除这些库是正确的答案。似乎在旧版本的Xcode中它们必须存在,但在我使用的当前版本(8.1)中,没有它们也可以工作。 - Alex

2

我在objective-c项目中遇到了这个问题。ios9.1,xcode7.1

1.进入Target> Build Phases >Link Binary with Librairies > +

2.选择libz.tbd并添加它

这对我起作用了。


1

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


1
你还可以通过在构建设置中添加参数-lz,从"其他链接器标志"中添加lybz.dylib

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


0

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

  1. 进入Build Phases >Link Binary with Librairies > + > Add other
  2. 在文件选择窗口中,按下CMD+Shift+G(前往文件夹),然后输入/usr/lib/
  3. 从/user/lib中添加:libz.1.dylib

这对我有用。


-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

前往您的项目设置 -> Build Phases -> Link with Binaries。通过单击+添加两个文件,然后选择Add Other。按下Cmd-Shift-G,然后复制粘贴文件路径。点击打开

如果您使用macports安装了sqlite3,请在Build Settings中删除/opt/local/lib的Library Search Path。


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