【问题标题】:How to specify compatibility version for dylib in iPhone projects?如何在 iPhone 项目中指定 dylib 的兼容版本?
【发布时间】:2010-11-18 13:02:24
【问题描述】:

我最近在我的 iPhone 项目中添加了一个静态库 (mobclix),它要求我将 Base SDK 设置为 3.0。该库声称与 2.2 兼容,到目前为止它看起来是真的。我将项目的部署目标设置为 2.2。没有问题。

现在,我也在同一个项目中使用 libxml2。显然,OS 3.0 中的 libxml2.2.dylib 比 OS 2.X(分别为版本 10 和 9)更新。但是,我使用 libxml2 的代码已经与 OS 2.X 中包含的 libxml2 版本兼容。由于我需要将 Base SDK 设置为 3.0,因此“兼容性版本”/最低版本要求/依赖项会自动设置为较新版本的 libxml2。当我尝试在 OS 2 中运行应用程序时,我得到了这个运行时错误(很明显):

  Dyld Error Message:
  Library not loaded: /usr/lib/libxml2.2.dylib
  Referenced from: /Users/Martijn/Library/Application Support/iPhone Simulator/User/Applications/4D5456DE-F297-4DF4-ACA6-DA8BBBBBA914/Luisterpaal.app/Luisterpaal
  Reason: Incompatible library version: Luisterpaal requires version 10.0.0 or later, but libxml2.2.dylib provides version 9.0.0

是否可以在某处覆盖版本要求? 或者其他解决这个问题的想法?

【问题讨论】:

  • 您的错误来自尝试在模拟器中运行它,这是否真的发生在真实硬件上?模拟器版本之间的二进制兼容性与实际 iPhone OS 固件之间的兼容性完全不同。
  • 我仍在等待崩溃报告。判断明显的症状(启动时应用程序崩溃)这可能是问题......
  • 这也发生在设备上。

标签: iphone backwards-compatibility dylib


【解决方案1】:

构建时根据当前SDK的dylib中嵌入的版本设置兼容版本。我还没有找到改变或覆盖它的方法。

但是,在 Xcode 的目标中,在“Link with binary with libraries”分支下,有一个选项可以“弱”链接 dylib。这会在加载 dylib(运行时)时跳过版本检查。那么你有责任只调用现有的函数。调用不存在的函数会使应用程序崩溃。

【讨论】:

    【解决方案2】:

    显然,SDK 3.0 的更改破坏了与 libxml 的兼容性。 Apple 在此处发布了相关信息:

    http://developer.apple.com/iphone/library/qa/qa2009/qa1659.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 2021-09-10
      • 2013-09-20
      • 2011-06-09
      • 2019-05-01
      相关资源
      最近更新 更多