Ссылка на libcrypto для леопарда? - PullRequest
11 голосов
/ 11 апреля 2010

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

Есть ли способ ссылки на эту библиотеку и все еще использовать 10.6 SDK?

Спасибо.

Ответы [ 5 ]

22 голосов
/ 12 апреля 2010

Согласно этой теме (первое сообщение в теме: 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), я считаю, что решение заключается в следующем:

  1. Перейдите в /Developer/SDKs/MacOSX10.5.sdk/usr/lib/. Из этой папки скопируйте «libcrypto.0.9.7.dylib» в исходную папку вашего проекта.

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

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

  4. Просмотрите настройки сборки и убедитесь, что удалите флаг компоновщика "-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 по некоторым причинам.)

1 голос
/ 29 сентября 2010

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

1 голос
/ 14 апреля 2010

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

0 голосов
/ 16 мая 2012

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 openssl@1.0.0c_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
0 голосов
/ 12 апреля 2010

Вы пробовали связываться с libcrypto.0.9.dylib или libcrypto.dylib вместо определенных версий?

...