web-dev-qa-db-fra.com

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

Lorsque j'essaie d'exécuter Rails console J'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 permis de cet article et j'ai essayé plusieurs choses:

brew reinstall postgresql (c'est bien la BD de 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 corrigé.

J'ai récemment ajouté pry-coolline, guard et guard-livereload gemmes à mon projet si cela fait une différence (la console Rails est bien chargée avant celles-ci). Je cours sur les dernières macos.

(Mise à jour) J'utilise pry Rails comme ma console Rails, si cela fait une différence).

De l'aide? Merci.

106
Jonathan Tuzman

l'erreur semble être générée lors de la recherche de /usr/local/opt/readline/lib/libreadline.7.dylib.

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

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 travaillé).

346
Hawz

Réinstaller ma Ruby semble l'avoir corrigé:

rvm reinstall 2.3.7
39
Jonathan Tuzman

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 recherche libreadline.7.dylib et libreadline.7.dylib n'est pas là dans le dossier.

20
ericshao

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

Vous pouvez obtenir la version facilement en tapant:

Ruby -v

Avec rbenv, la commande est:

rbenv install 2.3.7

avec rvm:

rvm reinstall 2.3.7
16
FreePender

Le plus souvent dans les applications Ruby, cela est provoqué 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.

Fondamentalement, il existe deux solutions:

Soit, vous pouvez créer un lien symbolique entre la version 8 de la gemme et la version manquante. Cela fonctionnera dans de nombreux cas, mais si la compatibilité descendante est rompue, ce ne sera pas le cas.

Ou, si la gemme prend réellement en charge la version 8, vous pouvez réinstaller cette gemme spécifique ou la "purifier" 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écessite une reconstruction, pour fonctionner avec une bibliothèque système, telle que readline.

4
Frederik Spang

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 l'homebrew de https://brew.sh

  • $ brew install coreutils: ceci installe le paquet gnu coreutils pour mac, nous voulons le greadlink de ceci car le lien de lecture de macOSX n'est pas le même que le lien de lecture gnu. C'est extrêmement déroutant, mais telle est la vie à Macland.

  • $ echo 'alias readlink=greadlink' >> ~/.bash_aliases J'ai trouvé que le lien de lecture de mac manquait un peu, j'ai donc remplacé le lien de lecture existant en créant un alias greadlink. (vous pouvez le rendre utilisable par tous les utilisateurs par $ alias readlink=greadlink >> /etc/bashrc 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.dylib J'ai lié le déjà lié .8. fichier au lieu de '.8.0.' parce que s'il devait être mis à jour vers .8.1. alors mon readlink ne cassera pas ou ne manquera pas les fonctionnalités de la bibliothèque. Je suis presque sûr que nous formaterons nos macs avant la sortie de 9+.

2
Salyangoz

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

a fait l'affaire pour moi pour macOS Catalina

2
Aris

Une solution très simple qui n'implique pas la reconstruction de votre gemmes RVM OR bibliothèques de liaison sym.

Ajoutez à votre Gemfile:

gem 'rb-readline'

Si vous faites des groupes de bundles

group :development do
  gem 'rb-readline'
end

Exécutez ensuite

> bundle

Faites-moi savoir si cela ne fonctionne pas.

2
Bret Weinraub

Je recommanderais de ne pas créer de lien manuel entre les bibliothèques natives. Comme sous OS X 10.4, la norme inclut le chemin de la bibliothèque /usr/include n'est plus utilisé et est verrouillé par SIP (ce qui rend difficile le déplacement).

Apple expédie 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 un compte rendu détaillé de ce qui se passe .

0
codenamev

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

Juste en cours d'exécution brew upgrade a résolu mon problème, car il a mis à jour (entre autres):

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