操作系统通常包含许多版本的动态库。这些由不同的程序使用,具体取决于它们在编译时编译的库,但是当您编译时,您希望链接与您正在包含/导入到源代码中的已安装头文件相对应的版本。
这libz.dylib
将是您安装的标头使用的相同版本的链接。
假设您有 2 个版本libXYZ.1.dylib
,并且libXYZ.2.dylib
,libXYZ.dylib
是一个链接,libXYZ.2.dylib
并且libXYZ.1.dylib
是一个遗留库,它在操作系统中也可用于在发布之前编译和分发的应用程序libXYZ.2.dylib
。已libXYZ.1.dylib
包含在 SDK 中,因为可能存在仍希望与旧版本链接的旧框架。
这两个版本可能在标头中具有非常相似的接口,因此您在编译和运行时不会看到任何真正的差异,但在未来的版本中,旧版本可能会被删除并添加新版本,这会使您的项目在链接时中断。
如果我理解正确,链接器将取消引用文件链接,以便找到正确的版本并保留该 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