libz.dylib против libz.1.2.3.dylib против libz.1.2.5.dylib
Я спросил это в комментарии, но это похоже на проблему, которая заслуживает собственного вопроса.
У меня есть проект, который делится между тремя различными установками XCode и двумя различными установками iOS SDK. На данный момент объединение разработчиков не является вариантом.
Когда я установил iOS 5 Beta и XCode 4.2, libz.1.2.3.dylib
нигде не было найдено. Я обнаружил, что libz.1.2.5.dylib
на libz.1.2.5.dylib
обрабатывается, но это несовместимо с другими активными установками XCode и iOS SDK.
- UIWindow bounds / frame - null
- rootViewController, установленный в Storyboard, не отображающийся в App Launch
- Как использовать пользовательские шрифты в iPhone SDK?
- Эффект кисти GLPaint с размытием и скосом
- Где симулятор сохраняет файлы (Xcode не обновляет файлы)?
Я исследовал это онлайн и обнаружил вышеупомянутое предложение и это предложение. Первое не работает для меня, и последнее заставляет меня нервничать.
Так в чем же разница между libz.dylib
, libz.1.2.3.dylib
и libz.1.2.5.dylib
и могу ли я безопасно ссылаться на первую по всем установкам XCode и iOS SDK?
- Условный сегмент выполняется при нажатии на UITableViewCell
- Прохождение пути каталога документов к скриптам запуска xcode
- Сбой приложения iOS / Xcode не отображает обратную трассировку (приостановлено)
- Условно связать сторонний API в Xcode
- Является ли использование раскадровки в Xcode 4.2 продукцией готовой и рекомендуемой? (см. предыдущие методы XIB)
- Если Xcode Storyboard поддерживает segues из UITableView с ячейками «динамического прототипа»?
- Проблема с сетчатой сетью высокого разрешения iPad3
- Скрыть UITableView при отображении результатов поиска
ОС часто включает в себя множество версий динамических библиотек. Они используются различными программами в зависимости от того, с какой библиотекой они были скомпилированы во время компиляции, но когда вы компилируете, вы хотите установить ссылку на версию, соответствующую установленным заголовкам, которые вы включаете / импортируете в свой исходный код.
libz.dylib
будет ссылкой на ту же версию, что и ваши установленные заголовки.
Скажем, у вас есть 2 версии libXYZ.1.dylib
и libXYZ.2.dylib
, libXYZ.dylib
– это ссылка на libXYZ.2.dylib
и libXYZ.1.dylib
– это устаревшая libXYZ.1.dylib
которая также доступна в ОС для приложений, скомпилированных и распространялся до libXYZ.2.dylib
. libXYZ.1.dylib
был включен в SDK, потому что могут существовать старые фреймворки, которые все еще хотят быть привязаны к старой версии.
Эти две версии могут иметь очень похожие интерфейсы в заголовке, поэтому при компиляции и запуске вы не увидите никаких реальных различий, но в будущих версиях могут быть удалены старые версии и добавлены новые, что приведет к разорению вашего проекта при связывании.
Если я правильно понимаю, компоновщик будет разыменовывать ссылки на файлы, чтобы найти нужную версию и сохранить это имя dylib и динамически связать с ним, когда приложение запустится. Таким образом, libz.dylib
не будет используемым путем (больше, чем во время компиляции).
Я вижу это в моей установке Xcode в 4.3 SDK
/Developer/…/SDKs/iPhoneOS4.3.sdk/usr/include/zlib.h
/* zlib.h -- interface of the 'zlib' general purpose compression library version 1.2.3, July 18th, 2005 Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler
libz.dylib
/Developer/.../SDKs/iPhoneOS4.3.sdk/usr/lib/libz.dylib -> libz.1.2.3.dylib
Вы можете легко увидеть в поиске, как они работают. В XCode «Показать в Finder» – одна из библиотек. Теперь нажмите один раз на libz.dylib и «Получить информацию». Вы увидите, что «Оригинал»:
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/libz.1.2.5.dylib
(с XCode4.2 с iOS 5 SDK)
Так что теперь это символическая ссылка на версию 1.2.5. В будущем он будет обновляться до последней версии 1.xx. Вы можете просмотреть все различные версии таким образом.
Просто связывайтесь с libz.dylib вместо конкретной версии, и компилятор свяжет доступную версию на установленном SDK. Ошибка Linker может возникнуть в случае связывания с определенной версией, недоступной в установленном SDK.
Вы можете использовать libz.1.2.5.dylib вместо libz.1.2.3.dylib
Заменить libz.1.2.3.dylib —–> libz.1.2.5.dylib