我最近在我的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
是否可以在某处覆盖版本要求? 还是其他想法来解决这个问题?
答案 0 :(得分:0)
兼容版本是根据构建期间当前SDK的dylib中嵌入的版本设置的。我还没有办法改变或改写它。
但是,在Xcode中的“使用二进制与库链接”分支下的目标中,有一个选项可以“弱”地链接一个dylib。这会在加载dylib(运行时)时跳过版本检查。那么您只需要调用现有功能。调用不存在的函数会使应用程序崩溃。
答案 1 :(得分:0)
显然,SDK 3.0发生了变化,破坏了与libxml的兼容性。 Apple在此发布了相关信息:
http://developer.apple.com/iphone/library/qa/qa2009/qa1659.html