Ответ 1
Вы можете попробовать установить базовый SDK на 10.5 в настройках вашей целевой сборки.
Я использую 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
.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?
Спасибо.
Вы можете попробовать установить базовый SDK на 10.5 в настройках вашей целевой сборки.
В соответствии с этой нитью здесь (первое сообщение в потоке: 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 по какой-то причине.)
В зависимости от того, для чего вы используете lib, вы можете заменить libcrypto на CommonCrypto, который хорошо работает с 10.5 и 10.6. Я использовал libcrypto только для функции MD5, поэтому я заменил openssl/md5.h на CommonCrypto/CommonDigest.h и MD5() с CC_MD5() и libcrypto с CommonCrypto, и теперь он работает на обоих Leopards.
Вы пытались установить ссылку на libcrypto.0.9.dylib или libcrypto.dylib вместо конкретных версий?
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