Xcode - Application avec fichiers *.dylib
Clem
Membre
Bonjour tout le monde,
J'essaye de développer une application sous Xcode 4.2.1 (Mac OSX 10.7.4), qui nécessite des librairies dynamiques externes. Ces librairies externes se trouvent dans le dossier : /opt/local/lib/
Mon application qui s'appelle CocoaCV.app fonctionne très bien, mais j'aimerais pouvoir la déployer sur un autre poste ne disposant pas de ces librairies. J'ai donc paramétré le projet dans Xcode de la façon suivante :
Target : CocoaCV
Build Settings :
Library Search Path = /opt/local/lib/
Build Phases :
Link Binary With Libraries :
libopencv_core.2.4.1.dylib
libopencv_imgproc.2.4.1.dylib
libopencv_highgui.2.4.1.dylib
Cocoa.Framework
Copy Files :
libopencv_core.2.4.1.dylib
libopencv_imgproc.2.4.1.dylib
libopencv_highgui.2.4.1.dylib
Une fois le projet archivé, je le partage en "Application", j'obtiens donc un CocoaCV.app qui contient les 3 fichiers *.dylib dans CocoaCV.app/Contents/MacOS/
En essayant de lancer l'application sur une autre machine ne disposant pas de ces librairies j'obtient le message d'erreur suivant :
On voit très clairement que ce sont les librairies dynamiques qui ne sont pas chargés. J'ai entendu parler de la commande "install_name_tool" et "otool" mais je n'ai pas réussie à mettre à jour les liens. Comment remédier à ça ?
J'essaye de développer une application sous Xcode 4.2.1 (Mac OSX 10.7.4), qui nécessite des librairies dynamiques externes. Ces librairies externes se trouvent dans le dossier : /opt/local/lib/
Mon application qui s'appelle CocoaCV.app fonctionne très bien, mais j'aimerais pouvoir la déployer sur un autre poste ne disposant pas de ces librairies. J'ai donc paramétré le projet dans Xcode de la façon suivante :
Target : CocoaCV
Build Settings :
Library Search Path = /opt/local/lib/
Build Phases :
Link Binary With Libraries :
libopencv_core.2.4.1.dylib
libopencv_imgproc.2.4.1.dylib
libopencv_highgui.2.4.1.dylib
Cocoa.Framework
Copy Files :
libopencv_core.2.4.1.dylib
libopencv_imgproc.2.4.1.dylib
libopencv_highgui.2.4.1.dylib
Une fois le projet archivé, je le partage en "Application", j'obtiens donc un CocoaCV.app qui contient les 3 fichiers *.dylib dans CocoaCV.app/Contents/MacOS/
En essayant de lancer l'application sur une autre machine ne disposant pas de ces librairies j'obtient le message d'erreur suivant :
<br />
Process: CocoaCV [7301]<br />
Path: /Volumes/VOLUME/CocoaCV.app/Contents/MacOS/CocoaCV<br />
Identifier: Cisum.CocoaCV<br />
Version: 1.0 (1)<br />
Code Type: X86-64 (Native)<br />
Parent Process: launchd [237]<br />
Date/Time: 2012-06-22 14:04:59.583 +0200<br />
OS Version: Mac OS X 10.7.4 (11E53)<br />
Report Version: 9<br />
Interval Since Last Report: 1926828 sec<br />
Crashes Since Last Report: 43<br />
Per-App Crashes Since Last Report: 5<br />
Anonymous UUID: 8B700353-1772-4369-8F38-EBE2A0115C96<br />
Crashed Thread: 0<br />
Exception Type: EXC_BREAKPOINT (SIGTRAP)<br />
Exception Codes: 0x0000000000000002, 0x0000000000000000<br />
Application Specific Information:<br />
dyld: launch, loading dependent libraries<br />
[b][color=#ff0000]Dyld Error Message:<br />
Library not loaded: /opt/local/lib/libopencv_core.2.4.dylib<br />
Referenced from: /Volumes/VOLUME/CocoaCV.app/Contents/MacOS/CocoaCV<br />
Reason: image not found[/color][/b]<br />
Binary Images:<br />
0x1059b9000 - 0x1059bafff +Cisum.CocoaCV (1.0 - 1) <91DC4578-B196-3431-9417-B3292EB577C0> /Volumes/VOLUME/CocoaCV.app/Contents/MacOS/CocoaCV<br />
0x1059bd000 - 0x1059bdff7 +GlimsLoaderMinimal.dylib (? ?? - ? ??) <6106E9A0-1878-47EF-739B-F2BE8AA38B18> /Library/Frameworks/GlimsAdditions.framework/Library/GlimsLoaderMinimal.dylib<br />
0x7fff655b9000 - 0x7fff655edbaf dyld (195.6 - ? ??) <0CD1B35B-A28F-32DA-B72E-452EAD609613> /usr/lib/dyld<br />
On voit très clairement que ce sont les librairies dynamiques qui ne sont pas chargés. J'ai entendu parler de la commande "install_name_tool" et "otool" mais je n'ai pas réussie à mettre à jour les liens. Comment remédier à ça ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Voici ici http://stackoverflow.com/questions/8102609/build-cocoa-application-bundle-with-private-dylib-framework
Ensuite j'applique :
Avec otool j'obtiens finalement ça :
Lorsque j'éxécute ce nouveau CocoaCV.app sur un autre poste, j'obtiens le message d'erreur suivant :
Merci bien pour les tuyaux...
@Baarde, peut tu m'indiquer la signification du @rpath/ ?
Sinon, peut-on automatiser ces commandes "install_name_tool" directement à partir d'un projet Xcode ?
Pour automatiser un script lors d'une build, sélectionne la Target puis l'onglet Build Phases, clique sur le bouton Add Build Phase et sélectionne Add Run Script. Dans ton script, tu peux utiliser la variable d'environnement BUILT_PRODUCTS_DIR qui correspond au dossier dans lequel le produit est placé.