Libreria non caricata: /usr/local/opt/readline/lib/libreadline.7.dylib


112

Quando provo a eseguire rails consoleottengo questo errore:

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

Una rapida ricerca mi ha portato a questo post e ho provato alcune cose:

brew reinstall postgresql (questo è effettivamente il DB per questo progetto)

e

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

(la mia versione di readline è 8)

e brew link readline --force

Ma nessuno di questi lo ha risolto.

Di recente ho aggiunto pry-coolline, guarde guard-livereloadgemme al mio progetto se questo fa la differenza (la console di rails è stata caricata bene prima di quelli). Sto eseguendo gli ultimi macos.

(Aggiornamento) Sto usando i binari di leva come console dei binari, se questo fa la differenza.

Qualsiasi aiuto? Grazie.


1
prova abrew reinstall readline
MrYoshiji

non ha funzionato, grazie
Jonathan Tuzman

Ha funzionato per me @MrYoshiji! Grazie!
Sponsor

Risposte:


374

l'errore sembra essere generato durante la ricerca di /usr/local/opt/readline/lib/libreadline.7.dylib.

Hai provato a collegarlo simbolicamente?

Quindi qualcosa come:

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

L'ho appena provato su macOS Mojave, ruby ​​2.5.3p105 e Rails 5.2.2 e ha funzionato.


Grazie Hawz. L'ho appena provato e non ha funzionato. Penso di averlo provato anche prima. Devo dire però quel collegamento simbolico e lnnon sono cose di cui so davvero nulla: /
Jonathan Tuzman

5
Ho lavorato per me. Forse @JonathanTuzman non eri nella buona direzione? cd /usr/local/opt/readline/lib
Ulysse BN

7
Ho dovuto brew link readline --forcecreare i collegamenti in /usr/local/opt/readline/lib.
Candland

Ti darei +10 se potessi. Grazie!
eos87

La vera risposta è brew link readline --forcedi Candland, che ha funzionato per me
Rakib Fiha

42

La reinstallazione della mia versione di Ruby sembra averla risolta:

rvm reinstall 2.3.7

11
Questa è la risposta, se hai usato rvm per installare ruby. Se la tua versione di ruby ​​è compilata con una versione di readline che non esiste più sul tuo sistema, allora dovresti ricompilare ruby ​​per collegarti alla nuova versione. Mi sono imbattuto in questo problema da solo e ho provato di tutto tranne il collegamento simbolico readline.8.dylib per sostituire readline.7.dylib (che sembra davvero una pessima idea, anche se sembra aver funzionato per quasi tutti, votando quella risposta .)
Kingdon,

4
Uso rbenv e ha rbenv install 2.5.1funzionato per me nel mio contesto. Questo è andato di traverso dopo che ero corso sudo xcode-select -s /Library/Developer/CommandLineToolsa risolvere un problema che stavo riscontrando altrove. fwiw
somedirection

1
Se stai usando il bundler potresti successivamente scoprire che devi bundle installreinstallare le gemme con estensioni native.
spume

27

Puoi provare

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

sei sulla strada giusta ma sembra che rails stia cercando libreadline.7.dylib e libreadline.7.dylib non è presente nella cartella.


1
Il problema si ripresenta quando eseguo 'brew upgrade' ma questa soluzione funziona bene e lo risolve
Iwan B.


7

Una soluzione molto semplice che non implica la ricostruzione del tuo gemset RVM O delle librerie di collegamento simbolico.

Aggiungi al tuo Gemfile:

gem 'rb-readline'

Se stai facendo bundler groups

group :development do
  gem 'rb-readline'
end

Allora corri

> bundle

Fammi sapere se non funziona.


4

Molto spesso nelle applicazioni Ruby, questo è causato da gems che hanno estensioni (le gemme che dicono "Building native extensions .."), che sono costruite usando una versione specifica di, in questo caso, readline ,.

Fondamentalmente, ci sono due soluzioni:

In entrambi i casi, puoi collegare simbolicamente la versione 8 della gemma alla versione mancante. Questo funzionerà in molti casi, ma se la retrocompatibilità è interrotta, non lo farà.

Oppure, se la gemma supporta effettivamente la versione 8, puoi reinstallare quella gemma specifica, o "pristine" eseguendola gem pristine --all .

EDIT : Nell'ambito di "quello che ho provato", reinstallare PostgreSQL è anche uno dei binari, costruito utilizzando una versione specifica, che potrebbe anche richiedere una ricostruzione, per lavorare con una libreria di sistema, come readline.


Ack! Neanche Pristine ha risolto il problema. Con quale precisione dovrei reinstallare PostgreSQL senza interrompere alcuna connessione al mio attuale DB? (ovviamente la risposta potrebbe essere "non è un problema", per quanto ne so di nulla).
Jonathan Tuzman

4

Ho questo problema:

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

facendo ...

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

ha fatto il trucco per me per macOS Catalina


2

Quindi ho controllato alcune risposte qui, ma non penso che possano funzionare con un'installazione Mac Mojave vaniglia. Sto usando 10.14.4 mentre ho fatto questi:

  • ottenere homebrew da https://brew.sh

  • $ brew install coreutils: questo installa gnu coreutils pkg per mac, vogliamo greadlinkda questo perché il readlink di macOSX non è lo stesso di gnu readlink. È estremamente confuso, ma tale è la vita in Macedonia.

  • $ echo 'alias readlink=greadlink' >> ~/.bash_aliasesHo trovato che il readlink di mac fosse un po 'carente, quindi ho sovrascritto il readlink esistente con l'alias di greadlink. (puoi renderlo utilizzabile da tutti gli utenti $ alias readlink=greadlink >> /etc/bashrc, consentendo a ogni utente di essere in grado di usarlo.

  • $ ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylibHo collegato il .8.file già collegato invece di ".8.0." file perché se dovesse essere aggiornato a .8.1.allora il mio readlink non interromperà o perderà funzionalità nella libreria. Sono abbastanza sicuro che formatteremo i nostri Mac prima dell'uscita di 9+.


0

Consiglierei di non collegare manualmente le librerie native. Come per OS X 10.4, il percorso della libreria di inclusione standard /usr/includenon viene più utilizzato ed è bloccato da SIP (rendendo difficile spostare le cose su).

Apple fornisce un "programma di installazione legacy" per poter installare le intestazioni nella "vecchia posizione", che risolverà anche il percorso per trovare correttamente le intestazioni installate tramite 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`

Vedi qui per un resoconto dettagliato su cosa sta succedendo .


Funzionava solo dopo il collegamento simbolico manuale libreadline.8.dyliba libreadline.7.dylibcui mancava. cioè eseguire il comando:ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
David Schumann

0

Il mio problema era lo stesso durante la corsa lftp .

Il semplice funzionamento brew upgradeha risolto il mio problema, poiché ha aggiornato (tra gli altri):

readline 8.0.0_1 -> 8.0.1
lftp 4.8.4 -> 4.8.4_2

0

Background: questo è successo quando ho provato a installare tig, ma penso che questo sia un problema comune che potresti avere e che devi collegare manualmente il software installato nel percorso corretto che un altro software desidera.

Se non riesci a trovare readline installato sul tuo Mac, dovresti eseguire

brew install readline

Dopo aver installato la scadenza, brew ti chiederà di collegarlo. Ma in realtà non puoi collegarti correndo

brew link readline

Anche tu non puoi collegarti correndo

sudo brew link readline

Mac OS ti avviserà che questo è estremamente pericoloso e ti impedirà di farlo.

L'ultima versione di readline è la 8, quindi vedrai un messaggio di errore come

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

La scadenza per l'installazione della birra alle

/usr/local/Cellar/readline/8.0.4

Quindi devi collegarlo manualmente al posto che il tuo software vuole usando il comando ls

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

Godere!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.