2017-03-27 4 views
1

J'ai un problème avec les dépendances dans mes dylibs.Définition correcte de l'éditeur de liens Xcode: bibliothèque non trouvée, mais dans la liste "Liaison binaire avec bibliothèques"

Je reçois actuellement le message d'erreur follwing:

dyld: Library not loaded: /opt/local/lib/libgvc.6.dylib 
    Referenced from: /Users/klauskneupner/Library/Developer/Xcode/DerivedData/Visual_Thinking-bvgfcqjwnobabodenabpggrwnoet/Build/Products/Debug/Visual Thinking.app/Contents/Frameworks/libgvplugin_dot_layout.6.dylib 
    Reason: image not found 

Le plus drôle est que j'ai cette bibliothèque (libgvc.6) dans la liste des dépendances. Dans ce cas, la libgvc.6 se trouve dans un répertoire de projet et non dans /opt/local/lib.

Que dois-je faire? Merci d'avance!

Répondre

1

Au moment de la construction l'éditeur de liens statique sur OS X, ld, écrit l'identificateur de bibliothèque partagée de chaque bibliothèque que vos liens d'application contre pour le binaire d'application. Au moment de l'exécution, l'éditeur de liens dynamiques, dyld, tente de charger chaque bibliothèque partagée à partir des chemins spécifiés dans le binaire de l'application. Vous pouvez voir cette information en utilisant otool -L YourApp.app/Contents/MacOS/YourApp.

La référence à /opt/local/lib/libgvc.6.dylib dans votre sortie de panne indique que l'identificateur de bibliothèque partagée est libgvc.6.dylib dans votre projet. Pour inclure la bibliothèque dans votre paquet .app d'une manière que votre application utilisera plutôt que de regarder dans /opt/local/lib vous devez:

  1. Modifier l'identificateur de bibliothèque partagée de libgvc.6.dylib afin que dyld recherchera le fichier binaire à l'intérieur votre ensemble d'applications. Cela est généralement effectué en exécutant install_name_tool -id @rpath/libgvc.6.dylib libgvc.6.dylib. L'espace réservé @rpath indique à dyld d'essayer de remplacer chacune des entrées du chemin de recherche du chemin d'accès du binaire qui charge la bibliothèque. Par défaut, le répertoire Frameworks de votre application est sur ce chemin de recherche. Mettez à jour toutes les bibliothèques préconfigurées existantes qui pointent vers libgvc.6.dylib pour y faire référence via le nouveau nom (la modification effectuée à l'étape 1 ne prend effet que lorsqu'un nouveau binaire est construit sur la bibliothèque, il n'est donc peut-être pas nécessaire si est seulement bibliothèques préconstruites qui se lient contre lui). Vous pouvez utiliser install_name_tool -change /opt/local/lib/libgvc.6.dylib @rpath/libgvc.6.dylib path/to/other.dylib pour mettre à jour ces autres bibliothèques. La sortie de votre crash montre que libgvplugin_dot_layout.6.dylib est une librairie qui aurait besoin d'être mise à jour. Ce n'est peut-être pas le seul.

  2. Assurez-vous que vos bibliothèques modifiées sont copiées dans le sous-répertoire cadres dans votre paquet d'applications. Ceci est généralement fait en utilisant une phase de construction Copier les fichiers dans votre projet Xcode.

+0

Great Job. Je vous remercie. –