1

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

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

4

2 回答 2

0

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

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

于 2009-08-17T09:42:22.423 回答
0

显然,SDK 3.0 的更改破坏了与 libxml 的兼容性。苹果在这里发布了关于它的信息:

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

于 2010-03-10T21:17:51.227 回答