Lorsque j'essaie d'exécuter un fichier exécutable que j'ai reçu sous Mac OS X, le message d'erreur suivant s'affiche:
dyld: Library not loaded: libboost_atomic.dylib
Referenced from: /Users/"Directory my executable is in"
Reason: image not found
Trace/BPT trap:5
J'ai installé les librairies boost et elles se trouvent dans /opt/local/lib
. Je pense que le problème a quelque chose à voir avec l'exécutable qui ne regarde que dans le répertoire dans lequel il se trouve car lorsque je colle le 'libboost_atomic.dylib' dedans, cela ne le dérange plus. Malheureusement, il se plaint de ne pas trouver la prochaine bibliothèque boost.
Y at-il un moyen facile de résoudre ce problème?
Retrouvez toutes les librairies boost:
$ otool -L exefile
exefile:
@executable_path/libboost_something.dylib (compatibility version 0.7.0, current version 0.7.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
et pour chaque libboost_xxx.dylib
, faites:
$ install_name_tool -change @executable_path/libboost_something.dylib /opt/local/lib/libboost_something.dylib exefile
et enfin, vérifiez à nouveau avec otool
:
$ otool -L exefile
exefile:
/opt/local/lib/libboost_something.dylib (compatibility version 0.7.0, current version 0.7.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
Pages de manuel: otool
install_name_tool
EDIT Il y a quelque temps, j'ai écrit un script python (copy_dylibs.py
) pour résoudre tout cela automatiquement lors de la création d'une application. Il regroupera toutes les bibliothèques de /usr/local
ou /opt/local
dans l'ensemble d'applications et corrigera les références à ces bibliothèques afin qu'elles utilisent @rpath
. Cela signifie que vous pouvez facilement installer une bibliothèque tierce en utilisant Homebrew et les conditionner tout aussi facilement.
J'ai maintenant rendu ce script public sur github .
Pour certains, cela peut être aussi simple que de définir le chemin système pour les bibliothèques dynamiques. Sur OS X, cela est aussi simple que de définir la variable d’environnement DYLD_LIBRARY_PATH
. Voir:
Cela a fonctionné pour moi:
brew upgrade node
J'ai eu cette erreur quand j'ai essayé d'installer Ruby 2.3.1 en utilisant RVM. Il m'a d'abord dit d'exécuter brew update
, ce que j'ai fait, puis lorsque j'ai essayé d'exécuter rvm install Ruby-2.3.1
, j'ai reçu l'erreur dans cette question SO.
Le correctif consistait à exécuter d'abord brew upgrade
, apparemment selon cette superutilisateur.com question que vous devez exécuter à la fois brew update
&& brew upgrade
. Cela fait, je pourrais enfin installer Ruby 2.3.1.
Vous pouvez utiliser la commande otool avec l'option -L pour l'exécutable, qui affichera l'emplacement où l'exécutable attend ces bibliothèques.
Si le chemin d'accès à ceux-ci doit être modifié, utilisez la commande -install_name_tool , qui vous permet de définir le chemin d'accès aux bibliothèques.
Je suis arrivé ici en essayant de lancer un programme que je viens de compiler avec CMake. Quand je tente de l'exécuter, il se plaint en disant:
dyld: Library not loaded: libboost_system.dylib
Referenced from: /Users/path/to/my/executable
Reason: image not found
J'ai contourné le problème en disant à CMake d'utiliser la version statique de Boost, au lieu de lui laisser utiliser la version dynamique:
set(Boost_USE_STATIC_LIBS ON)
Après la mise à niveau de Mac OS vers Mojave. J'ai essayé d'installer des modules npm via la commande yarn
. Une erreur s'est produite:
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.60.dylib
Referenced from: /usr/local/bin/node
Reason: image not found
Abort trap: 6
A été résolu avec:
brew update
brew upgrade
Je le répare par brew install libpng
Vous pouvez utiliser Sudo install_name_tool -change
changer le chemin du dylib Et Sudo install_name_tool -id
changer le nom du dylib
J'ai résolu ce problème en appuyant simplement sur Commande + Maj + K, ce qui rend une nouvelle version propre, vraiment étrange.
J'ai rencontré le problème de blocage de l'application en citant l'erreur SIGABRT dans le thread. Un aperçu de l'incident est la bibliothèque dyld non chargée et l'image non trouvée, quelque chose comme ça.
Cela a été vu dans la version 9.3 de xcode. La raison pour laquelle j’ai découvert que xcode ne captait pas les bibliothèques de manière dynamique, c’est pourquoi j’ai dû le faire manuellement, ce qui a résolu mon problème de plantage.
Suivez les étapes ci-dessous: Étape 1: Accédez aux phases de construction Étape 2: Appuyez sur le bouton '+' en haut et sélectionnez "Nouvelle phase de copie du fichier" Étape 3: Sélectionnez la destination comme cadres et cliquez sur le bouton '+' ci-dessous pour ajouter des fichiers . Étape 4: Sélectionnez Ajouter autre en bas, cliquez sur CMD + MAJ + G et collez le chemin ci-dessous, /Applications/Xcode.app/Contenu/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/Swift/iphoneos
Maintenant, vous pourrez voir quelques fichiers Swift, Sélectionnez toutes les bibliothèques Swift avec l'extension .dylib et cliquez sur Ouvrir.
Ceux-ci seront ajoutés aux fichiers binaires incorporés dans l'onglet général de l'application.
Créez un nouveau groupe dans le dossier du projet et ajoutez toutes ces bibliothèques.
Maintenant, lancez votre application.
Code heureux
J'ai corrigé cela en réinstallant Homebrew
Désinstaller
Ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
Installer
/usr/bin/Ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Peut-être que quelqu'un a besoin de ça:
si vous utilisez cmake, ajoutez DYLIB_INSTALL_NAME_BASE "@rpath"
aux propriétés de la cible:
set_target_properties(target_dyLib PROPERTIES
# # for FRAMEWORK begin
# FRAMEWORK TRUE
# FRAMEWORK_VERSION C
# MACOSX_FRAMEWORK_IDENTIFIER com.cmake.targetname
# MACOSX_FRAMEWORK_INFO_PLIST ./Info.plist
# PUBLIC_HEADER targetname.h
# # for FRAMEWORK end
IPHONEOS_DEPLOYMENT_TARGET "8.0"
DYLIB_INSTALL_NAME_BASE "@rpath" # this is the key point
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
DEVELOPMENT_TEAM "${DEVELOPMENT_TEAM}"
)
ou dans le projet de bibliothèque dynamique xcode Cible -> Paramètre de construction set Base de noms d'installation de bibliothèques dynamiques à @rpath
Pour toute personne rencontrant le même problème avec une bibliothèque ou un package différent, @ user3835452 est sur la bonne voie. J'ai trouvé ce message en essayant d'exécuter composer
:
dyld: Library not loaded: /usr/local/opt/openldap/lib/libldap-2.4.2.dylib
Referenced from: /usr/local/opt/[email protected]/bin/php
Reason: image not found
Abort trap: 6
Après avoir essayé beaucoup de façons différentes, j'ai juste lancé brew install openldap
et tout a été corrigé. Notez que j’avais déjà exécuté brew update
et brew upgrade
, mais c’est seulement après avoir installé manuellement openldap
que cela a fonctionné.
Pour ceux qui visitent cette page parce qu'ils rencontrent cette erreur en essayant de lier un framework tiers à leur projet en utilisant Xcode 6.3.1, le problème que j'ai rencontré est dû au fait que la bibliothèque a été créée avec une version plus ancienne du compilateur en utilisant une version différente. de Swift. La seule façon de résoudre ce problème pour moi était de reconstruire le cadre.
Ceci est expliqué dans une documentation technique Apple.
Si vous construisez une application qui n'utilise pas Swift mais intègre un contenu tel qu'un framework, Xcode n'inclura pas ces bibliothèques dans votre application. Par conséquent, votre application se bloquera lors du lancement avec un message d'erreur ressemblant à ceci:
définir le paramètre de construction du contenu incorporé contenant du code Swift (EMBEDDED_CONTENT_CONTAINS_Swift) sur YES dans votre application
Voici le lien vers le doc complet Apple qui l'explique ici