Как в Xcode связать динамическую библиотеку (libcurl ), чтобы приложение работало и в более старых версиях Mac OS?

Я использую libcurl в проекте Mac, созданном и скомпилированном на OS 10.7 Lion.. Я могу просто связать динамическую библиотеку, используя либо параметр -lcurl в Other Linker Flags, либо добавив библиотеку в свой проект. Все работает как положено.

Я бы хотел, чтобы приложение работало и на OS 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?

Я рассматривал несколько вариантов.:

  1. Один из них — изменить Base SDK, как предлагается в этом посте.: Версия, совместимая с Mac OS X libcurl dylib Если я сделаю это, приложение будет работать нормально. Но это не вариант для меня. Я должен использовать SDK 10.7, поэтому возврат к более старой версии SDK неприемлем.

  2. Я пробовал слабое связывание с библиотекой, используя -слабую _опцию библиотеки /usr/lib/libcurl.dylib в Other Linker Flags. Приложение запускается, но затем падает, когда я пытаюсь сослаться на символы libcurl. Однако я знаю, что это не проблема с несовместимым кодом, потому что он работает, когда я меняю Base SDK.

  3. Я пробовал динамически загружать библиотеку внутри кода, используя dlopen ("libcurl.dylib", RTLD _LOCAL|RTLD _LAZY );Библиотека, кажется, загружается, но я должен вручную привязать все символы, на которые я ссылаюсь?

Наверняка должен быть способ сделать это. Библиотека libcurl установлена ​​в Mac OS 10.5, 10.6 и 10.7, но приложение не может использовать доступную библиотеку в более старых версиях Mac OS. Как я могу это исправить?

11
задан Community 23 May 2017 в 12:34
поделиться