Bibliothèque non chargée: /usr/local/opt/readline/lib/libreadline.7.dylib

112

Lorsque j'essaye de courir, rails consolej'obtiens cette erreur:

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

Une recherche rapide m'a conduit à cet article et j'ai essayé plusieurs choses:

brew reinstall postgresql (c'est bien la DB pour ce projet)

et

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

(ma version de readline est 8)

et brew link readline --force

Mais aucun de ceux-ci ne l'a résolu.

J'ai récemment ajouté pry-coolline, guardet des guard-livereloadgemmes à mon projet si cela fait une différence (la console des rails est bien chargée avant celles-ci). J'utilise les derniers macos.

(Mise à jour) J'utilise des leviers comme console de rails, si cela fait une différence.

De l'aide? Merci.

Jonathan Tuzman
la source
1
essayez debrew reinstall readline
MrYoshiji
n'a pas fonctionné, merci
Jonathan Tuzman
A travaillé pour moi @MrYoshiji! Merci!
Commandite le

Réponses:

375

l'erreur semble se produire lors de la recherche /usr/local/opt/readline/lib/libreadline.7.dylib.

Avez-vous essayé de créer un lien symbolique?

Donc quelque chose comme:

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

Je viens d'essayer cela sur macOS Mojave, ruby ​​2.5.3p105 et Rails 5.2.2 et j'ai fonctionné.

Hawz
la source
Merci Hawz. Je l'ai juste essayé et cela n'a pas fonctionné. Je pense que j'avais déjà essayé cela avant. Je dois dire que ce lien symbolique et ce lnne sont pas des choses dont je sais quoi que ce soit: /
Jonathan Tuzman
5
J'ai travaillé pour moi. Peut-être que @JonathanTuzman n'étais pas dans la bonne direction? cd /usr/local/opt/readline/lib
Ulysse BN
7
J'ai dû brew link readline --forcecréer les liens dans /usr/local/opt/readline/lib.
Candland
Je vous donnerais +10 si je le pouvais. Merci!
eos87
La vraie réponse est brew link readline --forceCandland, qui a fonctionné pour moi
Rakib Fiha
42

La réinstallation de ma version Ruby semble avoir résolu le problème:

rvm reinstall 2.3.7
Jonathan Tuzman
la source
11
C'est la réponse, si vous avez utilisé rvm pour installer ruby. Si votre version de ruby ​​est compilée avec une version de readline qui n'existe plus sur votre système, vous devez recompiler ruby ​​pour établir un lien avec la nouvelle version. Je viens de rencontrer ce problème moi-même et j'ai tout essayé, sauf en créant un lien symbolique avec readline.8.dylib pour remplacer readline.7.dylib (ce qui semble être une très mauvaise idée, même si cela semble avoir fonctionné pour la plupart des gens, en votant pour cette réponse .)
Kingdon
4
J'utilise rbenv et a rbenv install 2.5.1travaillé pour moi dans mon contexte. Cela a mal tourné après avoir couru sudo xcode-select -s /Library/Developer/CommandLineToolspour résoudre un problème que je rencontrais ailleurs. fwiw
certaine direction
1
Si vous utilisez un bundler, vous constaterez peut-être par la suite que vous devez bundle installréinstaller les gemmes avec des extensions natives.
spume
27

peux-tu essayer

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

vous êtes sur la bonne voie, mais il semble que rails cherche libreadline.7.dylib et libreadline.7.dylib n'est pas là dans le dossier.

ericshao
la source
1
Le problème réapparaît lorsque j'exécute `` mise à niveau de brassage '' mais cette solution fonctionne correctement et le corrige
Iwan B.
17

Oui, la meilleure réponse est de réinstaller.

Vous pouvez obtenir la version facilement en tapant:

ruby -v

Avec rbenv, la commande est ie:

rbenv install 2.3.7

avec rvm:

rvm reinstall 2.3.7
FreePender
la source
L'exécution a rbenv install <ruby-version>échoué avec "rake" des conflits de rake avec l'exécutable installé du conflit redis-rack . Je devais courirrbenv uninstall <ruby-version> && rbenv install <ruby-version>
Hirurg103
7

Une solution très simple qui n'implique pas la reconstruction de votre gemset RVM OU des bibliothèques de liens symboliques.

Ajoutez à votre Gemfile:

gem 'rb-readline'

Si vous faites des groupes de bundler

group :development do
  gem 'rb-readline'
end

Puis cours

> bundle

Faites-moi savoir si cela ne fonctionne pas.

Bret Weinraub
la source
4

Le plus souvent dans les applications Ruby, cela est causé par des gemmes qui ont des extensions (les gemmes disant "Construire des extensions natives .."), qui sont construites en utilisant une version spécifique de, dans ce cas readline,.

En gros, il existe deux solutions:

Soit vous pouvez créer un lien symbolique vers la version 8 du gem, vers la version manquante. Cela fonctionnera dans de nombreux cas, mais si la rétrocompatibilité est rompue, ce ne sera pas le cas.

Ou, si la gemme supporte réellement la version 8, vous pouvez réinstaller cette gemme spécifique, ou la «vierges» en exécutant gem pristine --all.

EDIT : Dans le cadre de votre "ce que j'ai essayé", la réinstallation de PostgreSQL est également l'un des binaires, construit en utilisant une version spécifique, qui peut également nécessiter une reconstruction, pour fonctionner avec une bibliothèque système, telle que readline.

Frederik Spang
la source
Ack! Pristine ne l'a pas réparé non plus. Avec quelle précision dois-je réinstaller PostgreSQL sans interrompre la connexion à ma base de données actuelle? (bien sûr, la réponse pourrait être "ce n'est pas un problème", pour autant que je sache quoi que ce soit).
Jonathan Tuzman
4

Vous avez ce problème:

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

Faire...

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

fait l'affaire pour moi pour macOS Catalina

Aris
la source
2

J'ai donc vérifié quelques réponses ici, mais je ne pense pas qu'elles puissent fonctionner avec une installation mac vanilla Mojave. J'utilise 10.14.4 pendant que je faisais ceci:

  • obtenir un homebrew sur https://brew.sh

  • $ brew install coreutils: ceci installe le pkg gnu coreutils pour mac, nous voulons le greadlinkde ceci car le readlink de macOSX n'est pas le même que le readlink de gnu. C'est extrêmement déroutant mais telle est la vie en macland.

  • $ echo 'alias readlink=greadlink' >> ~/.bash_aliasesJ'ai trouvé que le readlink de macs manquait un peu, j'ai donc remplacé le readlink existant en aliasant greadlink. (vous pouvez le rendre utilisable par tous les utilisateurs, $ alias readlink=greadlink >> /etc/bashrcce qui permettra à chaque utilisateur de pouvoir l'utiliser.

  • $ ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylibJ'ai lié le .8.fichier déjà lié au lieu de ".8.0." fichier car s'il devait être mis à jour, .8.1.mon readlink ne cassera pas ou ne manquera pas les fonctionnalités de la bibliothèque. Je suis sûr que nous formaterons nos macs avant la sortie de 9+.

Salyangoz
la source
0

Je recommanderais de ne pas créer manuellement des liens symboliques sur les bibliothèques natives. Comme sous OS X 10.4, le chemin de la bibliothèque d'inclusion standard /usr/includen'est plus utilisé et est verrouillé par SIP (ce qui rend difficile le déplacement des éléments).

Apple fournit un «programme d'installation hérité» pour que vous puissiez installer les en-têtes dans «l'ancien emplacement», ce qui résoudra également votre chemin pour trouver correctement les en-têtes installés via 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`

Voir ici pour une description détaillée de ce qui se passe .

nom de codev
la source
Cela ne fonctionnait qu'après une liaison symbolique manuelle libreadline.8.dylibà libreadline.7.dyliblaquelle manquait. ie exécuter la commande:ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
David Schumann
0

Mon problème était le même lors de l'exécution lftp.

Le simple fait de courir brew upgradea résolu mon problème, car il a été mis à jour (entre autres):

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

Contexte: Cela s'est produit lorsque j'ai essayé d'installer tig, mais je pense que c'est un problème courant que vous pourriez avoir: vous devez lier manuellement le logiciel installé dans le bon chemin qu'un autre logiciel souhaite.

Si vous ne trouvez pas readline installé sur votre Mac, vous devez exécuter

brew install readline

Après avoir installé la date limite, brew vous demandera de le lier. Mais en fait, vous ne pouvez pas lier en exécutant

brew link readline

Même vous ne pouvez pas créer de lien en courant

sudo brew link readline

Mac OS vous avertira que c'est extrêmement dangereux et vous empêchera de le faire.

La dernière version de readline est la version 8, vous verrez donc le message d'erreur comme

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

La date limite d'installation de la bière à

/usr/local/Cellar/readline/8.0.4

Vous devez donc le lier manuellement à l'endroit souhaité par votre logiciel en utilisant la commande ls

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

Prendre plaisir!

Eric Wu
la source