ios xcode linker xcode4.2 libz

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.