2009-08-11 2 views
1

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

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

Ваши ошибки из попытки запустить его в тренажере, делает это на самом деле произошло на реальном оборудовании, а? Двоичная совместимость между версиями симулятора - это совсем другое, что совместимость между собственно прошивкой iPhone OS. –

+0

Я все еще жду сообщения о сбоях. Судя по видимым симптомам (сбой приложения при запуске), это может быть проблемой ... –

+0

Это также происходит на устройстве. –

ответ

0

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

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

Смежные вопросы