如何在iPhone项目中指定dylib的兼容版本?

时间:2009-08-11 08:11:05

标签: iphone backwards-compatibility dylib

我最近在我的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

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

2 个答案:

答案 0 :(得分:0)

兼容版本是根据构建期间当前SDK的dylib中嵌入的版本设置的。我还没有办法改变或改写它。

但是,在Xcode中的“使用二进制与库链接”分支下的目标中,有一个选项可以“弱”地链接一个dylib。这会在加载dylib(运行时)时跳过版本检查。那么您只需要调用现有功能。调用不存在的函数会使应用程序崩溃。

答案 1 :(得分:0)

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

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