ios - libz.dylib versus libz.1.2.3.dylib versus libz.1.2.5.dylib
xcode linker (4)
El sistema operativo a menudo incluye muchas versiones de bibliotecas dinámicas. Estos son utilizados por diferentes programas según la biblioteca en la que se compilaron en el momento de la compilación, pero cuando compila quiere vincular la versión que corresponde a los encabezados instalados que está incluyendo / importando en su código fuente.
libz.dylib
será un enlace a la misma versión que usan los encabezados instalados.
Digamos que tiene 2 versiones libXYZ.1.dylib
y libXYZ.2.dylib
, libXYZ.dylib
es un enlace a libXYZ.2.dylib
y libXYZ.1.dylib
es una lib heredada que también está disponible en el SO para aplicaciones compiladas y distribuido antes de que se libXYZ.2.dylib
. libXYZ.1.dylib
se ha incluido en el SDK porque puede haber marcos antiguos que aún desean vincularse con la versión anterior.
Las dos versiones pueden tener interfaces muy similares en el encabezado, por lo que no se verán diferencias reales al compilar y ejecutar, pero en versiones futuras las versiones anteriores podrían eliminarse y agregarse nuevas, lo que hará que su proyecto se rompa al enlazar.
Si lo entiendo bien, el enlazador desreferenciará los enlaces de archivos para que encuentre la versión correcta y mantenga ese nombre de dylib y se vincule dinámicamente con eso cuando se inicie la aplicación. Por lo tanto, libz.dylib
no será la ruta utilizada (más que en tiempo de compilación).
Veo esto en mi instalación de Xcode en el SDK 4.3
/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
Le pregunté esto en un comentario, pero parece un problema que merece su propia pregunta.
Tengo un proyecto compartido entre tres instalaciones diferentes de XCode y dos instalaciones diferentes del iOS SDK. Por el momento, unificar a los desarrolladores involucrados no es una opción.
Cuando instalé el iOS 5 Beta y XCode 4.2, libz.1.2.3.dylib
no se encontraba por ningún lado. Descubrí que la vinculación con libz.1.2.5.dylib
maneja esto, pero esto no era compatible con las otras instalaciones activas de XCode y iOS SDK.
Investigué esto en línea y descubrí la sugerencia anterior y this sugerencia. El primero no funciona para mí, y el segundo me pone nervioso.
Entonces, ¿cuál es la diferencia entre libz.dylib
, libz.1.2.3.dylib
y libz.1.2.5.dylib
y puedo vincular de forma segura con el primero en todas las instalaciones de XCode y iOS SDK?
Puede usar use libz.1.2.5.dylib en lugar de libz.1.2.3.dylib
Reemplace libz.1.2.3.dylib -----> libz.1.2.5.dylib
Puede ver fácilmente en el buscador cómo funcionan. En XCode, "Mostrar en el buscador" una de las bibliotecas. Ahora haga clic una vez en libz.dylib y "Obtener información". Verás que "Original" es:
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/libz.1.2.5.dylib
(a partir de XCode4.2 con iOS 5 SDK)
Entonces, es un enlace simbólico a la versión 1.2.5 por ahora. En el futuro, se actualizará a la última versión 1.xx. Puede examinar todas las versiones de esta manera.
Simplemente haga un enlace con libz.dylib en lugar de una versión específica y el compilador vinculará la versión disponible en el SDK instalado. El error del enlazador puede aparecer en caso de vincularse con alguna versión específica que no esté disponible en el SDK instalado actualmente.