ОС часто включает в себя множество версий динамических библиотек. Они используются различными программами в зависимости от того, с какой библиотекой они были скомпилированы во время компиляции, но когда вы компилируете, вы хотите сделать ссылку на версию, которая соответствует установленным заголовкам, которые вы включаете / импортируете в свой исходный код.
libz.dylib
будет ссылкой на ту же версию, что и ваши установленные заголовки.
Скажем, у вас есть 2 версии libXYZ.1.dylib
и libXYZ.2.dylib
, libXYZ.dylib
- это ссылка на libXYZ.2.dylib
и libXYZ.1.dylib
- это устаревшая библиотека, которая также доступна в ОС для приложений, скомпилированных и распространенных до libXYZ.2.dylib
был выпущен. libXYZ.1.dylib
был включен в SDK, потому что могут быть старые фреймворки, которые все еще хотят быть связаны со старой версией.
Две версии могут иметь очень похожие интерфейсы в заголовке, поэтому вы не увидите никаких реальных отличий при компиляции и запуске, но в будущих версиях старые версии могут быть удалены и добавлены новые, что приведет к сбою вашего проекта, когда ссылки.
Если я правильно понимаю, компоновщик разыменует ссылки на файлы, поэтому он найдет правильную версию и сохранит это имя dylib и будет динамически связываться с ним при запуске приложения. Так что libz.dylib
не будет используемым путем (больше, чем во время компиляции).
Я вижу это в моей установке Xcode в 4.3 SDK
/ Разработчик /.../ SDKs / iPhoneOS4.3.sdk / USR / включать / 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