dyld: Bibliothek nicht geladen… Grund: Bild nicht gefunden

293

Beim Versuch, eine ausführbare Datei auszuführen, die mir unter Mac OS X gesendet wurde, wird die folgende Fehlermeldung angezeigt

dyld: Library not loaded: libboost_atomic.dylib
  Referenced from: /Users/"Directory my executable is in"
  Reason: image not found
Trace/BPT trap:5

Ich habe die Boost-Bibliotheken installiert und sie befinden sich in /opt/local/lib. Ich denke, das Problem hat etwas damit zu tun, dass die ausführbare Datei nur in dem Verzeichnis nachschaut, in dem sie sich befindet. Wenn ich dort die 'libboost_atomic.dylib' einfüge, macht es nichts mehr aus. Leider beschwert es sich dann, dass es die nächste Boost-Bibliothek nicht finden kann.

Gibt es eine einfache Möglichkeit, dies zu beheben?

rwolst
quelle
Wenn Sie immer noch Probleme haben, verwenden Sie die Methode aus diesem Thema
Tarik

Antworten:

171

Hier finden Sie alle Boost-Bibliotheken:

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

und für jeden libboost_xxx.dylibtun:

$ install_name_tool -change @executable_path/libboost_something.dylib /opt/local/lib/libboost_something.dylib exefile

und überprüfen Sie schließlich otoolerneut:

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

Manpages: otool install_name_tool

BEARBEITEN Vor einiger Zeit habe ich ein Python-Skript ( copy_dylibs.py) geschrieben, um all diese Dinge beim Erstellen einer App automatisch zu bearbeiten. Es werden alle Bibliotheken aus /usr/localoder /opt/localin das App-Bundle gepackt und Verweise auf die zu verwendenden Bibliotheken korrigiert @rpath. Dies bedeutet, dass Sie mit Homebrew problemlos Bibliotheken von Drittanbietern installieren und genauso einfach verpacken können.

Ich habe dieses Skript jetzt auf Github veröffentlicht .

Trojaner
quelle
4
@trojanfoe Kannst du bitte hier erklären, was das Exefile ist? Ist es ein Tool Exec Dateipfad? ist es nicht?
VenushkaT
1
Nach dem Neukompilieren der ausführbaren Datei muss ich diesen Vorgang wiederholen - ziemlich ärgerlich während der Entwicklung.
Glas
2
Eigentlich ist es besser, DYLD_LIBRARY_PATHden Suchpfad zu ändern. Die andere Antwort hat dies.
Frankliuao
18
'exefile': Keine solche Datei oder Verzeichnis
ScottyBlades
2
@ScottyBlades exefilesteht für die ausführbare Datei, die Sie ausführen möchten . In meinem Fall otool -L /usr/local/bin/phphat der Trick getan.
Brunouno
106

Auf der GeneralRegisterkarte des Ziels befindet sich ein Abschnitt mit dem NamenFrameworks, Libraries, and Embedded Content

Klicken Sie auf das +Schild, fügen Sie es hinzu frameworkund der Absturz ist behoben.

Aktualisieren Sie den neuesten Xcode-Screenshot

Himanshu Padia
quelle
2
Was soll ich hinzufügen? Es gibt viele Dateien
Joe Sleiman
@Himanshu Ich habe libcppreset für mein Projekt! Es hat eine große Abhängigkeit von Boost und ... Ich führe ein Bash-Skript aus, um sie mit install_name_tool zu ändern, aber für das LC_ID_DYLIBkann ich keinen Symlink in usr / loca / opt erstellen ! Gibt es eine Möglichkeit, das herauszufinden? : | Es ist schmerzhaft :(
Mo Farhand
85

Das hat bei mir funktioniert:

brew upgrade node
oshaiken
quelle
7
Was macht das aber?
Diegoaguilar
3
@diegoaguilar Dies wird nodemit Homebrew neu installiert . Wahrscheinlich hat eine andere Installation den Knotenpfad unterbrochen. Hat auch für mich gearbeitet.
Hugo Nogueira
68

Nach dem Upgrade von Mac OS auf Mojave. Ich habe versucht, npm-Module über den yarnBefehl zu installieren. Ich habe folgende Fehlermeldung erhalten:

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

Wurde behoben mit:

brew update
brew upgrade
Michael Klishevich
quelle
2
Mein IntelliJ hat diesen Fehler ausgelöst, als ich kürzlich xcode aktualisiert habe. Ich habe versucht, einen node.js-Server über Intellij auszuführen. Ich war mir nicht sicher, was schief gelaufen ist. Das Ausführen node --versionauf meinem System führte zu demselben Fehler. Das Ausführen der beiden oben genannten Befehle hat mein Problem gelöst.
Ishan
3
In meinem Fall habe ich auch den brew cleanupBefehl ausgeführt, was manchmal gut ist, wenn Sie alte Versionen entfernen möchten.
Michael Behrens
In Bezug auf @ MichaelBehrens 'Kommentar starte ich brew cleanupdann behoben.
Buraco
37

Für einige ist dies möglicherweise so einfach wie das Festlegen des Systempfads für dynamische Bibliotheken. Unter OS X ist dies so einfach wie das Festlegen der DYLD_LIBRARY_PATHUmgebungsvariablen. Sehen:

Ist es in Ordnung, DYLD_LIBRARY_PATH unter Mac OS X zu verwenden? Und was ist der dynamische Bibliothekssuchalgorithmus damit?

Markshiz
quelle
Es mag dumm erscheinen, aber ich frage mich, welchen Wert ich setzen DYLD_LIBRARY_PATHsoll.
Caesar
1
@Caesar Legen Sie das Verzeichnis fest, in dem sich die Dylibs befinden, die Sie verknüpfen möchten.
Markshiz
Sie können nicht erwarten, dass sich Ihre Benutzer ändern DYLD_LIBRARY_PATH. Die richtige Lösung besteht darin, nicht standardmäßige Bibliotheken in die einzuschließen, .appund der Benutzer muss nichts tun. Der Entwickler muss jedoch möglicherweise immer noch den Loader-Pfad gemäß meiner Antwort hacken.
Trojanfoe
12

Ich habe diesen Fehler erhalten, als ich versucht habe, Ruby 2.3.1 mit rvm zu installieren. Zuerst wurde mir gesagt, ich solle rennen brew update, was ich auch tat, und als ich dann versuchte zu rennen rvm install ruby-2.3.1, erhielt ich den Fehler in dieser SO-Frage.

Das Update war zum ersten Lauf brew upgrade, offenbar nach dieser superuser.com Frage , die Sie beide tun müssen brew update&& brew upgrade. Sobald das erledigt war, konnte ich endlich Ruby 2.3.1 installieren.

IonicBurger
quelle
Die Leute müssen aufhören, brew upgradeeinfach so zu empfehlen . Dies kann ein massiver Störfaktor für das gesamte System sein. Isolieren Sie stattdessen, was aktualisiert werden muss, und aktualisieren Sie nur diese.
Jivan
7

Sie können den Befehl otool mit der Option -L für die ausführbare Datei verwenden, die anzeigt, wo die ausführbare Datei diese Bibliotheken erwartet.

Wenn der Pfad zu diesen geändert werden muss, verwenden Sie den Befehl install_name_tool , mit dem Sie den Pfad zu den Bibliotheken festlegen können.

Der dunkle Ritter
quelle
7

Nachdem Xcode seine IDE aktualisiert hat, haben sie die Funktionsweise ein wenig geändert.

Früher wurde es in separate Abschnitte unterteilt, wie oben gezeigt, wobei "Embedded Binaries" und "Linked Frameworks and Libraries" als separate Abschnitte verwendet wurden.

Jetzt ist es ein kombinierter Abschnitt mit Dropdown-Listen auf der rechten Seite, was eingebettet werden soll.

Neue IDE-Änderungen

Das war für mich zunächst verwirrend, macht aber jetzt vollkommen Sinn.

Jay Snayder
quelle
5

Ich bin hierher gekommen, um ein Programm auszuführen, das ich gerade mit CMake kompiliert habe. Wenn ich versuche, es auszuführen, beschwert es sich zu sagen:

dyld: Library not loaded: libboost_system.dylib
  Referenced from: /Users/path/to/my/executable
  Reason: image not found

Ich habe das Problem umgangen, CMake anzuweisen, die statische Version von Boost zu verwenden, anstatt die dynamische Version verwenden zu lassen:

set(Boost_USE_STATIC_LIBS ON)
Lucio Paiva
quelle
5

Wenn Sie Xcode 11 verwenden:

Gehen Sie zur GeneralRegisterkarte und fügen Sie das Framework im Frameworks, Libraries, and Embedded ContentAbschnitt hinzu.

Wichtig: Standardmäßig ist es möglicherweise als markiert Do Not Embed. Ändern Sie Embed Without Signinges in die im Bild gezeigte Form, und Sie können loslegen.

Geben Sie hier die Bildbeschreibung ein

Für Xcode-Versionen unter 11:

Fügen Sie einfach das Framework im Embedded BinariesAbschnitt hinzu und Sie sind fertig.

Prost!

atulkhatri
quelle
5

So beheben Sie den folgenden Fehler auf meinem Macbook Catalina 10.15.4:

dyld: Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
    Referenced from: /usr/local/bin/mongoexport
    Reason: image not found
Abort trap: 6

Ich habe den folgenden Befehl ausgeführt und das obige Problem umgangen:

brew switch openssl 1.0.2s
Kwex
quelle
3

Ich habe dieses Problem mit Product > Clean Build Folder( CommandShiftK) behoben , was einen neuen sauberen Build wirklich seltsam macht.

Douglas Pfeifer
quelle
2

Sie können den sudo install_name_tool -changeDylib-Pfad sudo install_name_tool -idändern und den Dylib-Namen ändern

hailuodev
quelle
2

Ich repariere es durch brew install libpng

user3835452
quelle
2

Wenn Sie cmake verwenden, fügen Sie den Zieleigenschaften Folgendes hinzu DYLIB_INSTALL_NAME_BASE "@rpath":

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

oder in Xcode dynamische Bibliothek Projekt Target -> Build - Einstellung eingestellt Dynamische Bibliothek installiert Namen Basis zu @rpath

cn00
quelle
Ich erstelle ein dynamisches Bibliotheksprojekt für das Kakao-Framework, es funktioniert, und im Vergleich zu meinem schlechten, von cmake generierten Projekt finde ich dies anders und habe es behoben, es funktioniert unter iOS.
cn00
2

Wenn Sie virtualenv verwenden, entfernen Sie einfach den Ordner Ihrer Umgebung und erstellen Sie ihn mit diesem Befehl neu virtualenv --python=/usr/local/bin/python3 the_name_of_my_env

Bormat
quelle
1

Für alle, die auf diese Seite kamen, weil dieser Fehler beim Versuch auftrat, ein Framework eines Drittanbieters mit Xcode 6.3.1 mit ihrem Projekt zu verknüpfen, bestand das Problem darin, dass die Bibliothek mit einer älteren Version des Compilers unter Verwendung einer anderen Version erstellt wurde von schnell. Die einzige Möglichkeit, dies für mich zu beheben, bestand darin, das Framework neu zu erstellen.

Ein weiterer Grund, warum Sie dies möglicherweise erhalten, ist in einem technischen Dokument von Apple angegeben.

Wenn Sie eine App erstellen, die Swift nicht verwendet, aber Inhalte wie ein Framework einbettet, das dies tut, nimmt Xcode diese Bibliotheken nicht in Ihre App auf. Infolgedessen stürzt Ihre App beim Start mit der folgenden Fehlermeldung ab:

Setzen Sie die Build-Einstellung Embedded Content Contains Swift Code (EMBEDDED_CONTENT_CONTAINS_SWIFT) in Ihrer App auf YES

Hier ist der Link zum vollständigen Apple-Dokument, das es hier erklärt

bolnad
quelle
1

Für mein Framework habe ich ein Xcode-Teilprojekt verwendet, das als Git-Submodul hinzugefügt wurde.

Ich glaube, ich habe diesen Fehler erhalten, weil ich das Framework mit einem anderen Signierteam als meiner Haupt-App signiert habe. (Teams für App gewechselt; vergessen, für Framework zu wechseln)

Die Lösung besteht darin, nicht innerhalb des Framework-Projekts zu unterschreiben. Target > General > Frameworks, Libraries, and Embedded ContentSignieren Sie stattdessen im Abschnitt der Haupt-App das Framework über Embed & Sign.

Wenn ich auswähle Do not Embedoder Embed Without Signingstattdessen den Fehler erhalte:

FRAMEWORK nicht gültig für die Verwendung in Prozessen mit Bibliotheksüberprüfung: Zugeordnete Datei hat keinen CD-Hash, vollständig ohne Vorzeichen? Der Code muss mindestens ad-hoc signiert sein.

pkamb
quelle
1

Xcode 11.1 & Swift 5.1

Schnelle Lösung

Stellen Sie zunächst sicher, dass in der externen hinzugefügten Bibliothek die Option Einbetten auf der Registerkarte Allgemein unter Eingebettete Binärdateien ausgewählt ist.

Wenn immer noch nicht funktioniert ..

Dies liegt daran, dass verschiedene, nicht übereinstimmende Versionen von Bibliotheken vorhanden sind.

Aktualisieren Sie die Pods

pod update

Wichtig: Überprüfen Sie, ob alle Bibliotheken in der Liste Build-Einstellungen -> Bibliotheken und Frameworks enthalten sind, und geben Sie die Option zum Einbetten in den Build an

Einfach super arbeiten

Saranjith
quelle
0

Für alle, die dasselbe mit einer anderen Bibliothek oder einem anderen Paket erleben, ist @ user3835452 auf dem richtigen Weg. Ich habe diese Meldung beim Ausführen gefunden 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

Nachdem ich viele verschiedene Wege ausprobiert hatte, lief ich einfach brew install openldapund es reparierte es. Beachten Sie, dass ich bereits ausgeführt wurde brew updateund brew upgradeerst nach der manuellen Installation openldaptatsächlich funktioniert hat.

Brunouno
quelle
0

Ich habe dies behoben, indem ich Homebrew neu installiert habe

Deinstallieren

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

Installieren

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Sidonaldson
quelle
0

Gibt es eine einfache Möglichkeit, dies zu beheben?

Ich habe es gerade benutzt brew upgrade <the tool>. In meinem Fall brew upgrade tmux.

verwirrt00
quelle
0

Ich hatte das Problem mit dem Absturz der App, als ich den SIGABRT-Fehler im Thread zitierte. Die Übersicht über den Absturz ist, dass die Dyld-Bibliothek nicht geladen wurde und das Bild so etwas nicht gefunden wurde.

Dies wurde in Xcode 9.3 gesehen. Der Grund, warum ich herausgefunden habe, dass Xcode Bibliotheken nicht dynamisch aufnimmt, war, dass ich es manuell tun musste, um mein Absturzproblem zu lösen.

Befolgen Sie die folgenden Schritte:

  1. Gehen Sie zu Phasen erstellen
  2. Klicken Sie oben auf die Schaltfläche '+' und wählen Sie "Neue Kopierdatei-Phase".
  3. Wählen Sie Ziel als Frameworks und klicken Sie unten auf die Schaltfläche '+', um Dateien hinzuzufügen.
  4. Wählen Sie unten Andere hinzufügen, klicken Sie auf CMD + UMSCHALT + G und fügen Sie den folgenden Pfad ein. /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos

Jetzt können Sie einige schnelle Dylibs sehen. Wählen Sie alle schnellen Bibliotheken mit der Erweiterung .dylib aus und klicken Sie auf Öffnen.

Diese werden zu den eingebetteten Binärdateien auf der Registerkarte "Allgemein" der App hinzugefügt.

Erstellen Sie eine neue Gruppe im Projektordner und fügen Sie alle diese Bibliotheken hinzu.

Führen Sie nun Ihre App aus.

Miya Mirza
quelle
0

Wenn Sie eine Conda-Umgebung im Terminal verwenden, aktualisieren Sie die samtools, um das Problem zu beheben.

conda install -c bioconda samtools

Shrm
quelle
0

Das Beste wird oben beantwortet. Überprüfen Sie zuerst, was die Ausgabe von ist

otool -L

Und dann machen Sie Folgendes, wenn es falsch ist

set_target_properties(
    MyTarget
    PROPERTIES
    XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS
    "@executable_path/Frameworks @loader_path/Frameworks"
)

Und

set_target_properties(
        MyTarget
        PROPERTIES
        XCODE_ATTRIBUTE_DYLIB_INSTALL_NAME_BASE 
        "@rpath"
Sandroid
quelle
-1

Keines der oben genannten hat bei mir funktioniert, aber es hat brew reinstall icu4cfunktioniert.

Pierre Monico
quelle
-1

Für alle, die dieses Problem möglicherweise noch haben:

Dies ist ein anhaltendes Problem auf Apples Seite, und was für mich funktioniert hat, ist ein Upgrade auf ios 13.4 (Beta). Installierte das und arbeitete wie ein Zauber.

ChiefMalone
quelle
Dies ist kein IOS-Problem.
JBarros35