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.

Я исследовал это онлайн и обнаружил вышеупомянутое предложение и это предложение. Первое не работает для меня, и последнее заставляет меня нервничать.

Так в чем же разница между libz.dylib , libz.1.2.3.dylib и libz.1.2.5.dylib и могу ли я безопасно ссылаться на первую по всем установкам XCode и iOS SDK?

ОС часто включает в себя множество версий динамических библиотек. Они используются различными программами в зависимости от того, с какой библиотекой они были скомпилированы во время компиляции, но когда вы компилируете, вы хотите установить ссылку на версию, соответствующую установленным заголовкам, которые вы включаете / импортируете в свой исходный код.

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

  • Как изменить цвет кожи лица с исходного изображения в ios?
  • изменение размера контроллера popover при нажатии контроллера навигационного представления в popover на iPad
  • Просмотр измененных файлов в Xcode 4.2 Возможности SCM
  • Использование нескольких раскадровки в iOS
  • Сохранить метаданные CUSTOM в изображении, взятом из AVFoundation в iOS
  • Как использовать c ++ и object-c вместе в XCode 4.2
  • Xcode: Scheme scripts vs Целевые скрипты
  • Xcode 4 - ошибка clang
  • Перекрестное компиляция FreeTDS на iPhone
  • Xcode 4.2 iOS Пустое приложение и раскадровки
  • обновленный xcode для приложения ios5 не будет останавливаться на __dyld__dyld_start
  • Давайте будем гением компьютера.