Bibliothek nicht geladen: /usr/local/opt/readline/lib/libreadline.7.dylib

112

Wenn ich versuche zu laufen, rails consoleerhalte ich folgende Fehlermeldung:

/Users/TuzsNewMacBook/.rvm/gems/ruby-2.3.7/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require':
 dlopen(/Users/TuzsNewMacBook/.rvm/rubies/ruby-2.3.7/lib/ruby/2.3.0/x86_64-darwin18/readline.bundle, 9): 
Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib (LoadError)

Eine schnelle Suche brachte mich zu diesem Beitrag und ich habe ein paar Dinge ausprobiert:

brew reinstall postgresql (Dies ist in der Tat die DB für dieses Projekt)

und

cd /usr/local/opt/readline/lib    
ln libreadline.8.0.dylib libreadline.6.2.dylib

(Meine Version von Readline ist 8)

und brew link readline --force

Aber keines davon hat es behoben.

Ich habe kürzlich hinzugefügt und Edelsteine ​​zu meinem Projekt hinzugefügt pry-coolline, wenn dies einen Unterschied macht (die Schienenkonsole wurde zuvor gut geladen). Ich laufe auf den neuesten Macos.guardguard-livereload

(Update) Ich verwende Hebelschienen als Schienenkonsole, wenn das einen Unterschied macht.

Irgendeine Hilfe? Vielen Dank.

Jonathan Tuzman
quelle
1
versuchen Siebrew reinstall readline
MrYoshiji
hat nicht funktioniert, danke
Jonathan Tuzman
Arbeitete für mich @MrYoshiji! Vielen Dank!
Spons

Antworten:

374

Der Fehler scheint bei der Suche ausgelöst zu werden /usr/local/opt/readline/lib/libreadline.7.dylib.

Haben Sie versucht, das zu verknüpfen?

Also so etwas wie:

cd /usr/local/opt/readline/lib 
ln -s libreadline.8.0.dylib libreadline.7.dylib

Habe das gerade unter macOS Mojave, Ruby 2.5.3p105 und Rails 5.2.2 versucht und funktioniert.

Hawz
quelle
Danke Hawz. Ich habe es einfach versucht und es hat nicht funktioniert. Ich glaube, ich hatte das auch schon einmal versucht. Ich muss aber sagen, dass Symlink und lnsind keine Dinge, über die ich eigentlich etwas weiß: /
Jonathan Tuzman
5
Ich habe für mich gearbeitet. Vielleicht @JonathanTuzman warst du nicht in der guten Richtung? cd /usr/local/opt/readline/lib
Ulysse BN
7
Musste brew link readline --forcedie Links in erstellen /usr/local/opt/readline/lib.
Candland
Ich würde dir +10 geben, wenn ich könnte. Vielen Dank!
eos87
Die wirkliche Antwort ist brew link readline --forcevon Candland, das für mich funktioniert hat
Rakib Fiha
42

Die Neuinstallation meiner Ruby-Version scheint das Problem behoben zu haben:

rvm reinstall 2.3.7
Jonathan Tuzman
quelle
11
Dies ist die Antwort, wenn Sie Ruby mit rvm installiert haben. Wenn Ihre Ruby-Version mit einer Version von Readline kompiliert wird, die auf Ihrem System nicht mehr vorhanden ist, sollten Sie Ruby neu kompilieren, um eine Verknüpfung mit der neuen Version herzustellen. Ich bin gerade selbst auf dieses Problem gestoßen und habe alles versucht, außer readline.8.dylib zu verknüpfen, um für readline.7.dylib einzutreten (was eine wirklich schlechte Idee zu sein scheint, auch wenn es für fast alle funktioniert zu haben scheint, diese Antwort zu verbessern .)
Kingdon
4
Ich benutze rbenv und rbenv install 2.5.1habe in meinem Kontext für mich gearbeitet. Dies ging seitwärts, nachdem ich gelaufen war sudo xcode-select -s /Library/Developer/CommandLineTools, um ein Problem zu beheben, das ich anderswo hatte. fwiw
Somedirection
1
Wenn Sie Bundler verwenden, müssen Sie möglicherweise später bundle installdie Edelsteine ​​mit nativen Erweiterungen neu installieren.
Spume
27

kannst du es versuchen

cd /usr/local/opt/readline/lib    
ln -s libreadline.8.dylib libreadline.7.dylib

Sie sind auf dem richtigen Weg, aber es scheint, als ob Rails nach libreadline.7.dylib sucht und libreadline.7.dylib nicht im Ordner enthalten ist.

ericshao
quelle
1
Das Problem tritt erneut auf, wenn ich 'Brew Upgrade' ausführe, aber diese Lösung funktioniert einwandfrei und behebt es
Iwan B.
17

Ja, die beste Antwort ist eine Neuinstallation.

Sie können die Version einfach erhalten, indem Sie Folgendes eingeben:

ruby -v

Mit rbenvlautet der Befehl dh:

rbenv install 2.3.7

mit rvm :

rvm reinstall 2.3.7
FreePender
quelle
Die Ausführung ist rbenv install <ruby-version>mit "Rake" aufgrund von Rake-Konflikten mit der installierten ausführbaren Datei aufgrund eines Redis-Rack- Konflikts fehlgeschlagen . Ich musste rennenrbenv uninstall <ruby-version> && rbenv install <ruby-version>
Hirurg103
6

Eine sehr einfache Lösung, bei der Sie Ihre RVM-Gemset- oder Sym-Link-Bibliotheken nicht neu erstellen müssen.

Zu deiner Gemfile hinzufügen:

gem 'rb-readline'

Wenn Sie Bündlergruppen durchführen

group :development do
  gem 'rb-readline'
end

Dann renne

> bundle

Lassen Sie mich wissen, wenn das nicht funktioniert.

Bret Weinraub
quelle
4

In Ruby-Anwendungen wird dies am häufigsten durch Edelsteine ​​mit Erweiterungen (die Edelsteine ​​sagen "Native Erweiterungen erstellen ...") verursacht, die in diesem Fall mit einer bestimmten Version von erstellt wurden. readline .

Grundsätzlich gibt es zwei Lösungen:

Sie können auch Version 8 des Edelsteins mit der fehlenden Version verknüpfen. Dies funktioniert in vielen Fällen, aber wenn die Abwärtskompatibilität unterbrochen ist, ist dies nicht der Fall.

Wenn der Edelstein tatsächlich Version 8 unterstützt, können Sie diesen bestimmten Edelstein neu installieren oder ihn durch Ausführen "makellos" machen gem pristine --all.

BEARBEITEN : Im Rahmen Ihres "Was ich versucht habe" ist die Neuinstallation von PostgreSQL auch eine der Binärdateien, die mit einer bestimmten Version erstellt wurden, für die möglicherweise auch eine Neuerstellung erforderlich ist, um mit einer Systembibliothek wie readline zu arbeiten.

Frederik Spang
quelle
Bestätigen Sie! Pristine hat es auch nicht repariert. Wie genau sollte ich PostgreSQL neu installieren, ohne die Verbindung zu meiner aktuellen Datenbank zu trennen? (Natürlich könnte die Antwort lauten "das ist kein Problem", soweit ich etwas weiß).
Jonathan Tuzman
4

Habe dieses Problem:

dyld: Library not loaded: /usr/local/opt/mpfr/lib/libmpfr.4.dylib

tun...

cd /usr/local/opt/mpfr/lib/
ln -s libmpfr.dylib libmpfr.4.dylib

hat den Trick für mich für macOS Catalina gemacht

Aris
quelle
2

Also habe ich hier ein paar Antworten überprüft, aber ich glaube nicht, dass sie mit einer Vanilla Mojave Mac-Installation funktionieren können. Ich benutze 10.14.4, während ich diese gemacht habe:

  • Holen Sie sich Homebrew von https://brew.sh

  • $ brew install coreutils: dies installiert das gnu coreutils pkg für mac, wir wollen das greadlinkdavon, weil der readlink von macOSX nicht der gleiche ist wie der gnu readlink. Es ist äußerst verwirrend, aber so ist das Leben in Macland.

  • $ echo 'alias readlink=greadlink' >> ~/.bash_aliasesIch habe festgestellt, dass der Mac-Readlink etwas fehlt, daher habe ich den vorhandenen Readlink durch Aliasing von Greadlink überschrieben. (Sie können dies für alle Benutzer nutzbar machen, $ alias readlink=greadlink >> /etc/bashrcwodurch jeder Benutzer es verwenden kann.

  • $ ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylibIch habe die bereits verknüpfte .8.Datei anstelle von '.8.0' verknüpft. Datei, denn wenn es aktualisiert werden sollte, .8.1.wird mein Readlink die Funktionen in der Bibliothek nicht beschädigen oder verpassen. Ich bin mir ziemlich sicher, dass wir unsere Macs formatieren werden, bevor 9+ herauskommt.

Salyangoz
quelle
0

Ich würde empfehlen, native Bibliotheken nicht manuell zu verknüpfen. Unter OS X 10.4 wird der Standardpfad für die Include-Bibliothek /usr/includenicht mehr verwendet und ist von SIP gesperrt (was das Verschieben erschwert).

Apple liefert ein "Legacy-Installationsprogramm" aus, damit Sie die Header am "alten Speicherort" installieren können. Dadurch wird auch Ihr Pfad aufgelöst, um die über installierten Header korrekt zu finden brew.

cp /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg ~/Desktop && open ~/Desktop/macOS_SDK_headers_for_macOS_10.14.pkg`

Hier finden Sie eine detaillierte Beschreibung der Vorgänge .

codenamev
quelle
Dies funktionierte nur nach manueller Verknüpfung libreadline.8.dylib, libreadline.7.dylibdie fehlte. dh Befehl ausführen:ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
David Schumann
0

Mein Problem war beim Laufen genauso lftp .

Nur das Laufen brew upgradehat mein Problem gelöst, da es (unter anderem) aktualisiert wurde:

readline 8.0.0_1 -> 8.0.1
lftp 4.8.4 -> 4.8.4_2
Benjamín Valero
quelle
0

Hintergrund: Dies ist passiert, als ich versucht habe, tig zu installieren, aber ich denke, dies ist ein häufiges Problem, das Sie möglicherweise haben, wenn Sie die installierte Software manuell mit dem richtigen Pfad verknüpfen müssen, den eine andere Software wünscht.

Wenn Sie auf Ihrem Mac keine installierte Readline finden, sollten Sie diese ausführen

brew install readline

Nachdem Sie Deadline installiert haben, werden Sie von Brew aufgefordert, diese zu verlinken. Aber eigentlich kann man nicht durch Laufen verlinken

brew link readline

Auch Sie können nicht durch Laufen verlinken

sudo brew link readline

Mac OS warnt Sie, dass dies äußerst gefährlich ist, und hindert Sie daran.

Die neueste Version von readline ist Version 8, daher wird die Fehlermeldung wie folgt angezeigt

Library not loaded: /usr/local/opt/readline/lib/libreadline.8.dylib

Das Gebräu installiert Frist um

/usr/local/Cellar/readline/8.0.4

Sie müssen es also manuell mit dem Befehl ls mit dem Ort verknüpfen, den Ihre Software haben möchte

ln -s /usr/local/Cellar/readline/8.0.4 /usr/local/opt/readline

Genießen!

Eric Wu
quelle