【问题标题】:libz.dylib versus libz.1.2.3.dylib versus libz.1.2.5.dyliblibz.dylib 与 libz.1.2.3.dylib 与 libz.1.2.5.dylib
【发布时间】:2011-10-19 11:11:02
【问题描述】:

我在评论中问过这个问题,但这似乎是一个值得自己提问的问题。

我有一个项目在三个不同的 XCode 安装和两个不同的 iOS SDK 安装之间共享。目前,统一相关的开发人员不是一种选择。

当我安装 iOS 5 Beta 和 XCode 4.2 libz.1.2.3.dylib 时无处可寻。我发现链接到 libz.1.2.5.dylib 处理了这个问题,但这与 XCode 和 iOS SDK 的其他活动安装不兼容。

我在网上对此进行了研究,发现了上述建议和this 建议。前者不适合我,后者让我紧张。

那么libz.dyliblibz.1.2.3.dyliblibz.1.2.5.dylib 之间有什么区别,我可以安全地链接到 XCode 和 iOS SDK 的所有安装中的第一个吗?

【问题讨论】:

    标签: ios xcode linker xcode4.2 libz


    【解决方案1】:

    操作系统通常包含许多版本的动态库。这些由不同的程序使用,具体取决于它们在编译时编译的库,但是当您编译时,您希望链接与您正在包含/导入到源代码中的已安装头文件相对应的版本。

    libz.dylib 将链接到您安装的标头使用的同一版本。

    假设您有 2 个版本 libXYZ.1.dyliblibXYZ.2.dyliblibXYZ.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
    

    【讨论】:

    • 所以你是说如果我链接到 libz.dylib 路径会在链接时动态更改到最新版本的库?
    【解决方案2】:

    您可以在查找器中轻松查看它们的工作原理。在 XCode 中,“在 Finder 中显示”库之一。现在单击一次 libz.dylib 和“获取信息”。您会看到“原始”是:

    /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/libz.1.2.5.dylib(从带有 iOS 5 SDK 的 XCode4.2 开始)

    所以它现在是 1.2.5 版本的符号链接。将来它将更新到最新的 1.x.x。您可以通过这种方式检查所有不同的版本。

    【讨论】:

      【解决方案3】:

      只需链接 libz.dylib 而不是特定版本,编译器将链接已安装 SDK 上的可用版本。如果链接到当前安装的 SDK 中不可用的某些特定版本,则可能会出现链接器错误。

      【讨论】:

      • 这似乎是迄今为止最好的答案!
      【解决方案4】:

      您可以使用 libz.1.2.5.dylib 代替 libz.1.2.3.dylib

      替换 libz.1.2.3.dylib -----> libz.1.2.5.dylib

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-11
        • 2015-06-27
        • 2011-04-11
        • 2017-10-03
        相关资源
        最近更新 更多