В Xcode, как мне связать динамическую библиотеку (libcurl), чтобы приложение также работало на более старых версиях Mac OS?
Я использую libcurl в проекте Mac, построенном и скомпилированном на OS 10.7 Lion. Я могу просто подключиться к динамической библиотеке, используя опцию -lcurl в других флагах Linker или добавив библиотеку в мой проект. Все работает так, как предполагалось.
Я хочу, чтобы приложение работало и с ОС 10.6 и 10.5. Я настроил целевой объект развертывания соответствующим образом. Когда я запускаю приложение в одной из этих версий ОС, я получаю dyld-ошибку:
Библиотека не загружена:/usr/lib/libcurl.4.dylib
Причина: Несовместимая версия библиотеки: X требует версии 7.0.0 или новее, но libcurl.4.dylib предоставляет версию 6.0.0.
Это аналогичная проблема для Mac OS 10.5.
Как я могу связать библиотеку libcurl с системой в Xcode в Mac OS 10.7, чтобы приложение также работало на 10.6 и 10.5?
Я просмотрел пару вариантов:
-
Один из них - изменить базовый SDK, как это предлагается в этом сообщении:
Версия для Mac OS X libcurl dylib Если я это сделаю, приложение работает нормально. Но это не вариант для меня. Я должен использовать 10.7 SDK, поэтому регресс на более раннюю версию SDK неприемлем.
-
Я пробовал слабую связь с библиотекой, используя параметр -weak_library/usr/lib/libcurl.dylib в других флагах Linker. Приложение запускается, но затем падает, когда я пытаюсь ссылаться на символы libcurl. Тем не менее, я знаю, что это не проблема с несовместимым кодом, потому что он работает, когда я изменяю базовый SDK.
-
Я пробовал динамически загружать библиотеку в код с помощью dlopen ( "libcurl.dylib", RTLD_LOCAL | RTLD_LAZY); Библиотека загружается, но я должен вручную привязать все символы, которые я ссылаюсь?
Конечно, должен быть способ сделать это. Библиотека libcurl установлена на Mac OS 10.5, 10.6 и 10.7, но приложение не может использовать доступную библиотеку в более старых версиях Mac OS. Как я могу это исправить?
Ответы
Ответ 1
Некоторые параметры:
- Переключение с libcurl на API-интерфейсы Mac (CFNetwork, NSURLConnection и т.д.).
- Создайте и упакуйте свою собственную версию libcurl со своим приложением, а не полагайтесь на системную библиотеку.
- Скопируйте или символизируйте библиотеку заглушек из SDK, соответствующую цели развертывания, и привяжите к ней явным путем.