34 votes

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 différentes installations de XCode et deux installations différentes de le SDK iOS. Au moment de l'unification de l'développeurs n'est pas une option.

Quand j'ai installé l'iOS 5 Bêta et XCode 4.2 libz.1.2.3.dylib a été nulle part pour être trouvée. J'ai découvert que le fait de lier l'encontre libz.1.2.5.dylib traité ce, mais ce n'était pas compatible avec les autres installations de XCode et le SDK iOS.

J'ai fait des recherches en ligne et a découvert le au-dessus de la suggestion et de cette suggestion. L'ancien ne fonctionne pas pour moi, et le dernier qui me rend nerveux.

Alors, quelle est la différence entre libz.dylib, libz.1.2.3.dylib et libz.1.2.5.dylib et je peux lien vers le premier dans toutes les installations de XCode et le SDK iOS?

28voto

epatel Points 32451

Le système d'exploitation comporte souvent de nombreuses versions de bibliothèques dynamiques. Ces données sont utilisées par différents programmes en fonction de la bibliothèque dans laquelle ils ont été compilés par contre à leur moment de la compilation, mais lorsque vous compilez vous souhaitez ajouter un lien sur la version qui correspondent à la installé en-têtes qui vous sont y compris/de les importer dans votre code source.

L' libz.dylib sera un lien vers la même version que votre installés les en-têtes de les utiliser.

Exemple, vous avez 2 versions libXYZ.1.dylib et libXYZ.2.dylib, libXYZ.dylib lien libXYZ.2.dylib et libXYZ.1.dylib est un héritage de la lib qui est également disponible dans le système d'exploitation pour les applications compilé et distribué avant libXYZ.2.dylib a été libéré. L' libXYZ.1.dylib a été inclus dans le kit de développement car il peut être de vieux cadres qui veulent toujours être lié à l'encontre de l'ancienne version.

Les deux versions peuvent être très similaires interfaces dans l'en-tête de sorte que vous ne verrez pas de différences réelles lorsque vous compilez et exécutez, mais dans de futures versions les plus anciennes versions peuvent être supprimés et de nouveaux sont ajoutés qui feront de votre projet de pause lors de la liaison.

Si je comprends bien droit, l'éditeur de liens de déréférencer des liens vers des fichiers de sorte qu'il va trouver la bonne version et de le garder dylib nom et un lien dynamique contre que lorsque l'application démarre. Si l' libz.dylib ne sera pas le chemin d'accès utilisé (plus qu'au moment de la compilation).

Je vois cela dans mon Xcode installation dans la 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

4voto

sbwoodside Points 3860

Vous pouvez facilement voir dans le viseur comment ils fonctionnent. Dans XCode, "Afficher dans le Finder" l'une des bibliothèques. Maintenant, 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 (à partir de XCode4.2 avec iOS 5 SDK)

C'est donc un lien symbolique vers la version 1.2.5 pour le moment. À l'avenir, il passera à la version 1.xx la plus récente. Vous pouvez examiner toutes les versions de cette manière.

3voto

Liez simplement avec libz.dylib au lieu d'une version spécifique et le compilateur liera la version disponible sur le SDK installé. Une erreur de l'éditeur de liens peut survenir en cas de liaison avec une version spécifique non disponible dans le SDK actuellement installé.

0voto

Akram Khan Points 31

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X