Xcode continue de chercher dylib sur le mauvais chemin
C'est mon erreur:
dyld: Library not loaded: /usr/local/lib/libofa.0.dylib
Referenced from: /sers/david/Projekte/Test/build/Debug/Test.app/Contents/MacOS/Test
Reason: image not found
J'ai fait quelques recherches et modifié le chemin d'accès à l'intérieur de la dylib avec install_name_tool:
davids-macbook:Test david$ otool -L libofa.0.0.0.dylib
libofa.0.0.0.dylib:
@executable_path/../Frameworks/libofa.0.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)
/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
Mais Xcode continue la recherche dans /usr/lib/:
build/Debug/Test.app/Contents/MacOS/Test:
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 15.0.0)
/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
@executable_path/../Frameworks/TagLib.framework/Versions/A/TagLib (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/QTKit.framework/Versions/A/QTKit (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libexpat.1.dylib (compatibility version 7.0.0, current version 7.2.0)
/System/Library/Frameworks/Quartz.framework/Versions/A/Quartz (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libcurl.4.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/local/lib/libofa.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 103.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)
/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 44.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 550.29.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 751.29.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1038.32.0)
Est-il un moyen de le régler dans Xcode??? Grâce
Edit: La bibliothèque n'est pas un projet Xcode. Sa construction ./configure; make
source d'informationauteur david
Vous devez vous connecter pour publier un commentaire.
Normalement ce que je fais, c'est ceci:
@rpath
. Ceci permettra de définir l'installation nom de@rpath/libofa.0.0.0.dylib
. Si vous êtes à la construction de la bibliothèque vous-même, vous pouvez le régler dans Xcode; sinon, utilisezinstall_name_tool
de le changer.@executable_path/../Frameworks
(ou@loader_path/../Frameworks
).Ce blog et cette une aller plus dans les détails.
Assurez-vous d'installer les outils de ligne de commande developer.apple.com puis ajouter la bibliothèque dans votre projet. Exécutez le script suivant dans votre Xcode: Cibles » les Phases de construction » Exécuter un Script et exécutez simplement:
Note: PAS de " ou " avant de dylib nom
Avant d'aller pour une solution, vous devez savoir ce qui est nouveau, à charge de la bibliothèque "dylib" de MAC que de les comparer à charge de la bibliothèque de "dll" dans windows.
La différence majeure dans dylib vs dll est "installer nom". L'installation est un nom de chemin d'accès inclus dans la bibliothèque dynamique qui dit où trouver la bibliothèque au moment de l'exécution. Il n'importe pas où vous copiez votre dylibs, Il pointe toujours à ancien chemin(à l'exception sans changer d'installer nom).
Vous pouvez savoir à l'origine de la recherche de chemin(installez le nom) en utilisant la commande ci-dessous
otool -L a.dylib
(il suffit de glisser dylib à la place d'un.dylib)
Pour plus de détails sur l'installation nom, reportez-vous à cette lien.
Maintenant, la solution pour changer le nouvel emplacement pour dylib("installer nom") est juste utiliser
install_name_tool
comme ci-dessousinstall_name_tool -change *old path of dylb* *new path of dylib*
vous pouvez obtenir de l'ancien chemin d'accès par
otool -L
de commande décrit ci-dessus déjà.(ancien chemin d'accès c'est à dire de chemin d'origine)install_name_tool -change
pouvez modifier le chemin de recherche de dylib et exécutable.Vous pouvez l'utiliser dans Xcode par écrit dans
Run script
fichier dans votre projet.