我在评论中提出了这个问题,但这似乎是一个值得单独提问的问题。
我有一个项目在三个不同的 XCode 安装和两个不同的 iOS SDK 安装之间共享。目前,统一所涉及的开发人员不是一种选择。
当我安装 iOS 5 Beta 和 XCode 4.2 时,找不到 libz.1.2.3.dylib
。我发现链接到 libz.1.2.5.dylib
可以解决这个问题,但这与 XCode 和 iOS SDK 的其他事件安装不兼容。
我在线研究了这个并发现了上述建议和 this建议。前者对我不起作用,后者让我紧张。
那么libz.dylib
、libz.1.2.3.dylib
和libz.1.2.5.dylib
有什么区别并且可以我安全地链接到所有 XCode 和 iOS SDK 安装中的第一个?
最佳答案
操作系统通常包含许多版本的动态库。这些由不同的程序使用,具体取决于它们在编译时针对哪个库进行编译,但是当您编译时,您希望链接与您包含/导入到源代码中的已安装 header 相对应的版本。
libz.dylib
将链接到与您安装的 header 使用的相同版本。
假设你有 2 个版本 libXYZ.1.dylib
和 libXYZ.2.dylib
,libXYZ.dylib
是一个链接到 libXYZ.2.dylib
和 libXYZ.1.dylib
是遗留库,在操作系统中也可用于在 libXYZ.2.dylib之前编译和分发的应用程序
已发布。 libXYZ.1.dylib
已包含在 SDK 中,因为可能有旧框架仍希望链接到旧版本。
这两个版本在头文件中可能有非常相似的接口(interface),因此您在编译和运行时不会看到任何真正的差异,但在未来的版本中,旧版本可能会被删除并添加新版本,这将使您的项目在以下情况下中断链接。
如果我理解正确,链接器将取消引用文件链接,以便找到正确的版本并保留该 dylib 名称,并在应用程序启动时动态链接到该名称。所以 libz.dylib
不会是使用的路径(比编译时更多)。
我在 4.3 SDK 的 Xcode 安装中看到了这一点
/Developer/.../SDKs/iPhoneOS4.3.sdk/usr/include/zlib.h
/* zlib.h -- interface of the 'zlib' general purpose compression library
version 1.2.3, July 18th, 2005
Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler
libz.dylib
/Developer/.../SDKs/iPhoneOS4.3.sdk/usr/lib/libz.dylib -> libz.1.2.3.dylib
关于ios - libz.dylib 与 libz.1.2.3.dylib 与 libz.1.2.5.dylib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6932991/