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?
Antworten:
Hier finden Sie alle Boost-Bibliotheken:
und für jeden
libboost_xxx.dylib
tun:und überprüfen Sie schließlich
otool
erneut: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/local
oder/opt/local
in 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 .
quelle
DYLD_LIBRARY_PATH
den Suchpfad zu ändern. Die andere Antwort hat dies.exefile
steht für die ausführbare Datei, die Sie ausführen möchten . In meinem Fallotool -L /usr/local/bin/php
hat der Trick getan.Auf der
General
Registerkarte des Ziels befindet sich ein Abschnitt mit dem NamenFrameworks, Libraries, and Embedded Content
Klicken Sie auf das
+
Schild, fügen Sie es hinzuframework
und der Absturz ist behoben.quelle
LC_ID_DYLIB
kann ich keinen Symlink in usr / loca / opt erstellen ! Gibt es eine Möglichkeit, das herauszufinden? : | Es ist schmerzhaft :(Das hat bei mir funktioniert:
quelle
node
mit Homebrew neu installiert . Wahrscheinlich hat eine andere Installation den Knotenpfad unterbrochen. Hat auch für mich gearbeitet.Nach dem Upgrade von Mac OS auf Mojave. Ich habe versucht, npm-Module über den
yarn
Befehl zu installieren. Ich habe folgende Fehlermeldung erhalten:Wurde behoben mit:
quelle
node --version
auf meinem System führte zu demselben Fehler. Das Ausführen der beiden oben genannten Befehle hat mein Problem gelöst.brew cleanup
Befehl ausgeführt, was manchmal gut ist, wenn Sie alte Versionen entfernen möchten.brew cleanup
dann behoben.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_PATH
Umgebungsvariablen. Sehen:Ist es in Ordnung, DYLD_LIBRARY_PATH unter Mac OS X zu verwenden? Und was ist der dynamische Bibliothekssuchalgorithmus damit?
quelle
DYLD_LIBRARY_PATH
soll.DYLD_LIBRARY_PATH
. Die richtige Lösung besteht darin, nicht standardmäßige Bibliotheken in die einzuschließen,.app
und der Benutzer muss nichts tun. Der Entwickler muss jedoch möglicherweise immer noch den Loader-Pfad gemäß meiner Antwort hacken.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 rennenrvm 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üssenbrew update
&&brew upgrade
. Sobald das erledigt war, konnte ich endlich Ruby 2.3.1 installieren.quelle
brew upgrade
einfach 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.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.
quelle
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.
Das war für mich zunächst verwirrend, macht aber jetzt vollkommen Sinn.
quelle
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:
Ich habe das Problem umgangen, CMake anzuweisen, die statische Version von Boost zu verwenden, anstatt die dynamische Version verwenden zu lassen:
quelle
Wenn Sie Xcode 11 verwenden:
Gehen Sie zur
General
Registerkarte und fügen Sie das Framework imFrameworks, Libraries, and Embedded Content
Abschnitt hinzu.Wichtig: Standardmäßig ist es möglicherweise als markiert
Do Not Embed
. Ändern SieEmbed Without Signing
es in die im Bild gezeigte Form, und Sie können loslegen.Für Xcode-Versionen unter 11:
Fügen Sie einfach das Framework im
Embedded Binaries
Abschnitt hinzu und Sie sind fertig.Prost!
quelle
So beheben Sie den folgenden Fehler auf meinem Macbook Catalina 10.15.4:
Ich habe den folgenden Befehl ausgeführt und das obige Problem umgangen:
quelle
Ich habe dieses Problem mit
Product > Clean Build Folder
( CommandShiftK) behoben , was einen neuen sauberen Build wirklich seltsam macht.quelle
Sie können den
sudo install_name_tool -change
Dylib-Pfadsudo install_name_tool -id
ändern und den Dylib-Namen ändernquelle
Ich repariere es durch
brew install libpng
quelle
Wenn Sie cmake verwenden, fügen Sie den Zieleigenschaften Folgendes hinzu
DYLIB_INSTALL_NAME_BASE "@rpath"
:oder in Xcode dynamische Bibliothek Projekt Target -> Build - Einstellung eingestellt Dynamische Bibliothek installiert Namen Basis zu @rpath
quelle
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
quelle
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.
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
quelle
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 Content
Signieren Sie stattdessen im Abschnitt der Haupt-App das Framework überEmbed & Sign
.Wenn ich auswähle
Do not Embed
oderEmbed Without Signing
stattdessen den Fehler erhalte:quelle
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
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
quelle
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
:Nachdem ich viele verschiedene Wege ausprobiert hatte, lief ich einfach
brew install openldap
und es reparierte es. Beachten Sie, dass ich bereits ausgeführt wurdebrew update
undbrew upgrade
erst nach der manuellen Installationopenldap
tatsächlich funktioniert hat.quelle
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)"
quelle
Ich habe es gerade benutzt
brew upgrade <the tool>
. In meinem Fallbrew upgrade tmux
.quelle
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:
/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.
quelle
Wenn Sie eine Conda-Umgebung im Terminal verwenden, aktualisieren Sie die samtools, um das Problem zu beheben.
quelle
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
Und
quelle
Keines der oben genannten hat bei mir funktioniert, aber es hat
brew reinstall icu4c
funktioniert.quelle
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.
quelle