Как указать версию совместимости для dylib в проектах iPhone? - PullRequest
1 голос
/ 11 августа 2009

Недавно я добавил статическую библиотеку (mobclix) в свой проект iPhone, которая потребовала от меня установки базового SDK на 3.0. Утверждается, что эта библиотека совместима с 2.2, и пока все выглядит так, как будто это правда. Я установил цель развертывания проекта на 2.2. Там нет проблем.

Теперь я также использую libxml2 в этом же проекте. По всей видимости, libxml2.2.dylib в OS 3.0 новее, чем в OS 2.X (версии 10 и 9 соответственно). Однако мой код, использующий libxml2, уже был совместим с версией libxml2, включенной в OS 2.X. Поскольку мне нужно было установить базовый 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 голосов
/ 11 марта 2010

Очевидно, что в SDK 3.0 произошли изменения, которые нарушили совместимость с libxml. Apple разместила об этом здесь:

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

0 голосов
/ 17 августа 2009

Версия совместимости устанавливается в соответствии с версией, встроенной в dylib текущего SDK во время сборки. Я не нашел способ изменить или переопределить это.

Однако в цели в Xcode в ветке «Связать с двоичным файлом с библиотеками» есть опция для слабой связи с dylib. Это пропускает проверку версии во время загрузки dylib (среды выполнения). Тогда вы несете ответственность за вызовы только существующих функций. Выполнение вызовов несуществующих функций приведет к сбою приложения.

...