Ссылка на libcrypto для Leopard?

Я использую Mac OS X 10.6 SDK, и моя цель развертывания установлена ​​в Mac OS 10.5. Я связываюсь с libcrypto (это требует AquaticPrime) и выяснил, что мое приложение не запускается на Leopard. Ошибка

dyld: Library not loaded: /usr/lib/libcrypto.0.9.8.dylib

Я пробовал следующие обходные пути, но никто из них не работает:

  • Прямая ссылка на libcrypto.0.9.7.dylib (10.6 SDK отказывается напрямую связываться с libcrypto.0.9.7.dylib.
  • Копирование версии 10.5 SDK libcrypto.0.9.7.dylib в каталог 10.6 lib и попытку ссылки t с ним (на этот раз процесс ссылки преуспел, но в Leopard приложение все еще пытается найти несуществующий файл libcrypto.0.9.8.dylib и, таким образом, выиграет 't запуск).
  • Копирование libcrypto.0.9.7.dylib из установки Mac OS X 10.5.8 и связь с ним (ссылка прошла успешно, но приложение по-прежнему ищет libcrypto.0.9.8.dylib).

Есть ли способ связаться с этой библиотекой и по-прежнему использовать 10.6 SDK?

Спасибо.

Ответ 1

Вы можете попробовать установить базовый SDK на 10.5 в настройках вашей целевой сборки.

Ответ 2

В соответствии с этой нитью здесь (первое сообщение в потоке: http://lists.apple.com/archives/cocoa-dev/2009/Aug/msg01737.html, листинг libcrypto on Snow Leopard: http://lists.apple.com/archives/cocoa-dev/2009/Aug/thrd19.html), я считаю, что решение должно сделать следующее:

  • Перейдите в /Developer/SDKs/MacOSX 10.5.sdk/usr/lib/. Из этой папки скопируйте "libcrypto.0.9.7.dylib" в исходную папку проекта.

  • Переименуйте файл, который вы только что скопировали, в "libmycrypto.dylib".

  • Добавьте файл, который вы только что переименовали в свой проект. Удостоверьтесь, что вы удалили любые другие связанные с ним библиотеки libcrypto из вашего проекта.

  • Пройдите через настройки сборки и убедитесь, что вы удалили флаг компоновщика "-lcrypto". (Обычно он помещается в настройку "Другие флаги компоновщика".)

Теперь вы сможете построить свой проект, и он будет работать как на 10.5, так и на 10.6.

(libcrypto.0.9.7 доступен как на 10.5, так и на 10.6. Скопированный вами файл - это всего лишь заглушка заголовков, но вы просто связываетесь с ним, а не встраиваете его в свой проект. Поскольку компоновщик использует установить путь, а не фактическое имя файла dylib, назвав его "libmycrypto.dylib", устраняет конфликты пути, но все же позволяет вам связываться с необходимой вам библиотекой.

FWIW, это проблема Xcode. Вы должны уметь ссылаться на /usr/lib/libcrypto.dylib - символическую ссылку - и настроить целевую версию libcrypto на 10.5 и 10.6. Тем не менее, Xcode по-видимому, ссылается на версию 0.9.8 при создании на Snow Leopard по какой-то причине.)

Ответ 3

В зависимости от того, для чего вы используете lib, вы можете заменить libcrypto на CommonCrypto, который хорошо работает с 10.5 и 10.6. Я использовал libcrypto только для функции MD5, поэтому я заменил openssl/md5.h на CommonCrypto/CommonDigest.h и MD5() с CC_MD5() и libcrypto с CommonCrypto, и теперь он работает на обоих Leopards.

Ответ 4

Вы пытались установить ссылку на libcrypto.0.9.dylib или libcrypto.dylib вместо конкретных версий?

Ответ 5

Leopard OS X поставляется с libcrypto и libssl, который имеет только архитектуру ppc.

Простым решением, которое не требует изменения кода приложения, является резервное копирование вашего libcrypto.0.9.dylib, libcrypto.0.9.8.dylib, libssl0.9.dylib, libssl.0.9.8.dylib и копирования над libcrypto.0.9.7.dylib и libssl.0.9.7.dylib.

Вы можете использовать Terminal.app для внесения этих изменений в папку "Программы":

  cd /usr/lib
  sudo cp libcrypto.0.9.dylib libcrypto.0.9.dylib.old
  sudo cp libssl.0.9.dylib libssl.0.9.dylib.old
  sudo ln -sf libcrypto.0.9.7.dylib libcrypto.0.9.dylib
  sudo ln -sf libssl.0.9.7.dylib libssl.0.9.dylib

Здесь альтернативное решение, которое позволяет вам оставаться в самой свежей версии openssl:

  1. reactivate the current openssl: port activate [email protected]_0 (or whatever)
  2. clean up your old unwanted versions of everything: port uninstall inactive
  3. uninstall badly behaved ports: port uninstall md5sha1sum subversion neon
  4. get them back: port install subversion md5sha1sum