libz.dylib contre libz.1.2.3.dylib contre libz.1.2.5.dylib

j'ai demandé dans un commentaire, mais cela semble être une question qui mérite sa propre question.

j'ai un projet qui est partagé entre trois installations différentes de XCode et deux installations différentes du SDK iOS. Pour le moment, unifier les développeurs impliqués n'est pas une option.

quand j'ai installé le iOS 5 Beta et le Xcode 4.2 libz.1.2.3.dylib était introuvable. J'ai découvert que le lien avec libz.1.2.5.dylib gère ceci mais ceci n'était pas compatible avec les autres installations actives de XCode et IOS SDK.

j'ai fait des recherches en ligne et j'ai découvert la suggestion ci-dessus et cette suggestion . Le premier ne marche pas pour moi, et le second me rend nerveux.

alors quelle est la différence entre libz.dylib , libz.1.2.3.dylib et libz.1.2.5.dylib et puis-je me connecter en toute sécurité à la première à travers toutes les installations de XCode et le SDK iOS?

34
demandé sur Community 2011-08-04 00:39:03

4 réponses

l'OS inclut souvent de nombreuses versions de bibliothèques dynamiques. Ceux-ci sont utilisés par différents programmes en fonction de la bibliothèque sur laquelle ils ont été compilés au moment de leur compilation, mais lorsque vous compilez vous voulez lier avec la version qui correspond aux en-têtes installés que vous incluez/importez dans votre code source.

le libz.dylib sera un lien vers la même version que celle utilisée par vos en-têtes installés.

dites vous ont 2 versions libXYZ.1.dylib et libXYZ.2.dylib , libXYZ.dylib est un lien vers libXYZ.2.dylib et libXYZ.1.dylib est un lib héritage qui est également disponible dans L'OS pour les applications compilées et distribuées avant que libXYZ.2.dylib a été publié. Le libXYZ.1.dylib a été inclus dans le SDK car il peut y avoir de vieux cadres qui veulent encore être reliés à l'ancienne version.

les deux versions peuvent avoir des interfaces très similaires dans l'en-tête de sorte que vous ne verrez aucune différence réelle lorsque vous compilez et exécutez, mais dans les versions futures, les anciennes versions peuvent être supprimées et de nouvelles versions ajoutées, ce qui mettra votre projet en panne lors de la mise en lien.

si je comprends bien, l'éditeur de liens déréférenciera les liens de fichiers de référence pour trouver la bonne version et garder ce nom de dylib et dynamiquement lier par rapport à cela lorsque l'application démarre. Ainsi, le libz.dylib ne sera pas le chemin utilisé (plus qu'au moment de la compilation).

je le vois dans mon Xcode installation dans le 4.3 SDK

/Développeur/.../ 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
28
répondu epatel 2011-08-04 21:30:06

, Vous pouvez facilement voir dans le finder comment ils fonctionnent. Dans XCode, "Show in Finder" une des bibliothèques. Cliquez une fois sur libz.dylib et "Get Info". Vous verrez que "Original" est:

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/libz.1.2.5.dylib (au XCode4.2 avec IOS 5 SDK)

Donc, c'est un lien symbolique vers la version 1.2.5 pour l'instant. À l'avenir, il sera mis à jour à la plus récente 1.x.x. Vous pouvez examiner toutes les différentes versions de cette façon.

4
répondu Simon Woodside 2011-11-12 05:28:52

juste le lien avec libz.dylib au lieu d'une version spécifique et compilateur liera la version disponible sur SDK installé. Une erreur de Linker peut survenir en cas de lien avec une version spécifique qui n'est pas disponible dans le SDK actuellement installé.

2
répondu Farooq Nasim Ahmad 2013-06-12 08:50:59

vous pouvez utiliser libz.1.2.5.dylib au lieu de libz.1.2.3.dylib

remplacer libz.1.2.3.dylib - - - - - - > libz.1.2.5.dylib

0
répondu Akram Khan 2013-05-29 13:20:09