Question

Je développe actuellement un programme sous Qt qui utilise la bibliothèque libqextserialport.1.dylib.

Je le construis et le lance dans x-code et il crache en retour:

dyld: Library not loaded: libqextserialport.1.dylib
    Referenced from: /Users/samuelreh/Desktop/QtOpenCV/build/Debug/QtOpenCV.app/Contents/MacOS/QtOpenCV
    Reason: image not found

La bibliothèque se trouve dans / Users / samuelreh / Desktop / QtOpenCV / qextserialport / build /.

Je peux exécuter mon programme en accédant au dossier exécutable /Users/samuelreh/Desktop/QtOpenCV/build/Debug/QtOpenCV.app/Contents/MacOS/ et en entrant:

nom_install_outils -change libqextserialport.1.dylib /Users/samuelreh/Desktop/QtOpenCV/qextserialport/build/libqextserialport.1.dylib QtOpenCV

Je sais qu’il existe probablement de nombreuses solutions en plus de cela. Quelqu'un sait le mieux / le plus élégant / le plus facile à faire avec x-code?

Était-ce utile?

La solution

Si je comprends bien votre problème, votre application fonctionne correctement. Aucune erreur lors de la liaison, mais lorsque vous essayez de la lancer, la bibliothèque est introuvable.

Cela n’est pas surprenant, car le fichier dylib se trouve dans un répertoire quelconque, pas sur le chemin du système. Vous devez soit le copier dans / usr / lib (ce n'est probablement pas une bonne idée), soit l'inclure dans le paquet de l'application. Ce dernier est probablement la meilleure approche.

Je ne l'ai jamais essayé, mais vous devez apparemment utiliser un Copiez la phase de construction des fichiers pour placer le dylib dans votre paquet, puis configurez Xcode afin que votre exécutable sache où le trouver.

Autres conseils

Je viens de faire exactement cela, avec un projet Module Bundle. Ceci était inclus dans un projet plus grand avec un exécutable séparé.

J'ai ajouté un " Copier les répertoires dans les frameworks " step, qui a copié les dylibs dans /Foobar.bundle/Contents/Frameworks/Foobar/. Ensuite, j’ai ajouté une phase de script d’exécution à exécuter en tant que dernière étape, afin de corriger les noms d’installation des dylibs dans l’exécutable:

install_name_tool -change libBobDylan.dylib @executable_path/../Plugins/Foobar.bundle/Contents/Frameworks/Foobar/libBobDylan.dylib path/to/build/product/Foobar.Bundle/Contents/MacOS/Foobar

Bien sûr, libBobDylan.dylib est également lié à libBillyIdol.dylib. J'ai donc dû ajouter une autre phase d'exécution de script au tout début de la cible pour corriger les noms d'installation ici:

install_name_tool -change libBillyIdol.dylib @executable_path/../Plugins/FooBar.bundle/Contents/Frameworks/Foobar/libBillyIdol.dylib local/path/to/libBobDylan.dylib

J'avais plus d'une douzaine de personnes contre qui me lier; Je devais convaincre le fournisseur des dylibs de remplir leur en-tête afin de prendre en compte mes nombreuses modifications install_name ...

Il vous suffit de faire glisser la bibliothèque du répertoire sur votre projet Xcode, de manière optimale dans les ressources, mais cela n'a pas d'importance (je crois). J'ai essayé avec et sans cocher la case 'Copier les fichiers dans le paquet' et cela fonctionne dans les deux cas, sans savoir si vous devez l'inclure dans le paquet pour le déploiement.

J'ai testé cela avec SQLite3 et l'application cacao (cacao-touch).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top