2009-08-11 16 views
1

J'ai récemment ajouté une bibliothèque statique (mobclix) à mon projet iPhone qui m'a obligé à définir le SDK de base à 3.0. Cette bibliothèque est prétendue compatible avec 2.2 et jusqu'à présent, il semble que c'est vrai. J'ai défini la cible de déploiement du projet sur 2.2. Aucun problème là-bas.Comment spécifier la version de compatibilité pour dylib dans les projets iPhone?

Maintenant, j'utilise aussi libxml2 dans ce même projet. Apparemment, le libxml2.2.dylib dans OS 3.0 est plus récent que dans OS 2.X (versions 10 et 9 respectivement). Cependant, mon code qui utilise libxml2 était déjà compatible avec la version libxml2 incluse avec OS 2.X. Comme j'avais besoin de définir le SDK de base sur 3.0, la version de compatibilité/version minimale/dépendances est automatiquement définie sur la nouvelle version de libxml2. Lorsque je tente d'exécuter l'application dans OS 2, je reçois cette erreur d'exécution (évidemment):

Dyld Error Message: 
    Library not loaded: /usr/lib/libxml2.2.dylib 
    Referenced from: /Users/Martijn/Library/Application Support/iPhone Simulator/User/Applications/4D5456DE-F297-4DF4-ACA6-DA8BBBBBA914/Luisterpaal.app/Luisterpaal 
    Reason: Incompatible library version: Luisterpaal requires version 10.0.0 or later, but libxml2.2.dylib provides version 9.0.0 

Est-il possible de remplacer quelque part l'exigence de version? Ou d'autres idées pour résoudre ce problème?

+0

Vos erreurs sont d'une tentative de l'exécuter dans le simulateur, cela se produit réellement sur le matériel réel aussi bien? Compatibilité binaire entre les versions de simulateur est une chose complètement différente que la compatibilité entre les firmwares iPhone OS. –

+0

J'attends toujours les rapports d'accident. A en juger les symptômes visibles (application qui se bloque au démarrage) cela pourrait être le problème ... –

+0

Cela arrive aussi sur l'appareil. –

Répondre

0

La version de compatibilité est définie en fonction de la version intégrée dans le dylib du SDK actuel pendant la génération. Je n'ai pas trouvé un moyen de changer ou de contourner cela.

Cependant, dans la cible de Xcode, sous la branche "Lier avec des bibliothèques binaires", il existe une option permettant de lier "faiblement" un dylib. Cela évite de vérifier la version au moment du chargement du dylib (runtime). Il vous appartient alors de ne faire que des appels aux fonctions existantes. Faire des appels à des fonctions inexistantes fera planter l'application.