web-dev-qa-db-fra.com

dyld: la bibliothèque n'est pas chargée ... Raison: l'image n'est pas chargée

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?

154
rwolst

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: otoolinstall_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 .

128
trojanfoe

Le General tab de la cible contient un Embedded Binaries field

ajoutez framework requis et le plantage est résolu.

 enter image description here

cliquez sur le signe + et ajoutez framework

64
Himanshu padia

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: 

Puis-je utiliser DYLD_LIBRARY_PATH sur Mac OS X? Et quel est l'algorithme de recherche de bibliothèque dynamique avec?

28
markshiz

Cela a fonctionné pour moi: 

brew upgrade node
27
oshaiken

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. 

12
IonicBurger

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.

5
TheDarkKnight

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)
4
Lucio Paiva

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
3
Michael Klishevich

Je le répare par brew install libpng

2
user3835452

Vous pouvez utiliser Sudo install_name_tool -change changer le chemin du dylib Et Sudo install_name_tool -id changer le nom du dylib

1
hailuodev

J'ai résolu ce problème en appuyant simplement sur Commande + Maj + K, ce qui rend une nouvelle version propre, vraiment étrange.

0
Douglas Pfeifer

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

0
Miya Mirza

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)"

0
sidonaldson

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

0
cn00

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é.

0
brunouno

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

0
bolnad