Biblioteca no cargada: /usr/local/opt/readline/lib/libreadline.7.dylib

112

Cuando intento ejecutar rails consoleme sale este error:

/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 búsqueda rápida me llevó a esta publicación y probé algunas cosas:

brew reinstall postgresql (este es de hecho el DB para este proyecto)

y

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

(mi versión de readline es 8)

y brew link readline --force

Pero ninguno de estos lo ha solucionado.

Recientemente he añadido pry-coolline, guardy guard-livereloadgemas a mi proyecto, si hay alguna diferencia (rieles consola cargado pequeña antes de esos). Estoy funcionando con los últimos macos.

(Actualización) Estoy usando palancas como mi consola de rieles, si eso hace alguna diferencia.

¿Alguna ayuda? Gracias.

Jonathan Tuzman
fuente
1
tratar debrew reinstall readline
MrYoshiji
no funcionó, gracias
Jonathan Tuzman
¡Funcionó para mí @MrYoshiji! ¡Gracias!
Sponsors

Respuestas:

374

el error parece arrojarse al buscar /usr/local/opt/readline/lib/libreadline.7.dylib.

¿Has intentado vincular eso?

Entonces algo como:

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

Intenté eso en macOS Mojave, ruby ​​2.5.3p105 y Rails 5.2.2 y funcionó.

Hawz
fuente
Gracias Hawz. Lo intenté y no funcionó. Creo que también lo había intentado antes. Sin embargo, debo decir que ese enlace simbólico y lnno son cosas de las que realmente sepa nada: /
Jonathan Tuzman
5
Trabajé para mí. ¿Quizás @JonathanTuzman no estabas en el buen camino? cd /usr/local/opt/readline/lib
Ulysse BN
7
Tuve que brew link readline --forcecrear los enlaces en /usr/local/opt/readline/lib.
Candland
Te daría +10 si pudiera. ¡Gracias!
eos87
La respuesta real es brew link readline --forcede Candland, que funcionó para mí
Rakib Fiha
42

Reinstalar mi versión de Ruby parece haberlo solucionado:

rvm reinstall 2.3.7
Jonathan Tuzman
fuente
11
Esta es la respuesta, si usó rvm para instalar ruby. Si su versión de ruby ​​está compilada con una versión de readline que ya no existe en su sistema, entonces debería volver a compilar ruby ​​para vincularla con la nueva versión. Me acabo de encontrar con este problema y probé todo menos el enlace simbólico readline.8.dylib para reemplazar readline.7.dylib (que parece una muy mala idea, incluso si parece haber funcionado para la mayoría de todos, votando esa respuesta .)
Kingdon
4
Utilizo rbenv y rbenv install 2.5.1me funcionó en mi contexto. Esto sucedió de forma lateral después de haber corrido sudo xcode-select -s /Library/Developer/CommandLineToolspara solucionar un problema que estaba experimentando en otro lugar. fwiw
somedirection
1
Si está utilizando el paquete, es posible que posteriormente necesite volver bundle installa instalar las gemas con extensiones nativas.
escupir
27

puedes intentar

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

está en el camino correcto pero parece que rails está buscando libreadline.7.dylib y libreadline.7.dylib no está en la carpeta.

ericshao
fuente
1
El problema vuelve a aparecer cuando ejecuto 'brew upgrade' pero esta solución funciona bien y la soluciono
Iwan B.
17

Sí, la mejor respuesta es reinstalar.

Puede obtener la versión fácilmente escribiendo:

ruby -v

Con rbenv, el comando es, por ejemplo:

rbenv install 2.3.7

con rvm:

rvm reinstall 2.3.7
FreePender
fuente
La ejecución rbenv install <ruby-version>falló con "rake" de conflictos de rake con el ejecutable instalado de redis-rack conflict. Tuve que correrrbenv uninstall <ruby-version> && rbenv install <ruby-version>
Hirurg103
6

Una solución muy simple que no implica la reconstrucción de su conjunto de gemas RVM O bibliotecas de enlace simbólico.

Agregue a su Gemfile:

gem 'rb-readline'

Si está haciendo grupos de agrupadores

group :development do
  gem 'rb-readline'
end

Entonces corre

> bundle

Avísame si eso no funciona.

Bret Weinraub
fuente
4

La mayoría de las veces en aplicaciones Ruby, esto es causado por gemas que tienen extensiones (las gemas que dicen "Construyendo extensiones nativas ..."), que se construyen usando una versión específica de, en este caso readline,.

Básicamente, hay dos soluciones:

O puede enlazar simbólicamente la versión 8 de la gema a la versión que falta. Esto funcionará en muchos casos, pero si se rompe la compatibilidad con versiones anteriores, no lo hará.

O, si la gema realmente es compatible con la versión 8, puede reinstalar esa gema específica o "limpiarla" ejecutándola gem pristine --all.

EDITAR : En el alcance de su "lo que he probado", reinstalar PostgreSQL, también es uno de los binarios, construido usando una versión específica, que también puede requerir una reconstrucción, para trabajar con una biblioteca del sistema, como readline.

Frederik Spang
fuente
¡Ack! Pristine tampoco lo arregló. ¿Con qué precisión debo reinstalar PostgreSQL sin romper ninguna conexión con mi base de datos actual? (por supuesto, la respuesta podría ser "eso no es una preocupación", hasta donde yo sé).
Jonathan Tuzman
4

Tengo este problema:

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

haciendo...

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

me hizo el truco para macOS Catalina

Aris
fuente
2

Así que he comprobado algunas respuestas aquí, pero no creo que puedan funcionar con una instalación básica de Mac Mojave. Estoy usando 10.14.4 mientras hice estos:

  • obtener homebrew de https://brew.sh

  • $ brew install coreutils: esto instala el paquete gnu coreutils para mac, queremos el greadlinkde esto porque el readlink de macOSX no es el mismo que el readlink de gnu. Es extremadamente confuso, pero así es la vida en Macland.

  • $ echo 'alias readlink=greadlink' >> ~/.bash_aliasesEncontré que macs readlink era un poco deficiente, así que anulé el readlink existente al poner un alias en greadlink. (puede hacer que todos los usuarios $ alias readlink=greadlink >> /etc/bashrcpuedan usarlo, lo que permitirá que todos los usuarios puedan usarlo.

  • $ ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib.8.Vinculé el archivo ya vinculado en lugar de '.8.0'. porque si se actualizara .8.1., mi readlink no se rompería ni perdería funciones en la biblioteca. Estoy bastante seguro de que formatearemos nuestros macs antes de que salga 9+.

Salyangoz
fuente
0

Recomendaría no vincular manualmente bibliotecas nativas. A partir de OS X 10.4, la ruta de la biblioteca de inclusión estándar /usr/includeya no se usa y está bloqueada por SIP (lo que dificulta mover cosas a).

Apple envía un "instalador heredado" para que pueda instalar los encabezados en la "ubicación anterior", que también resolverá su ruta para encontrar correctamente los encabezados instalados a través de 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`

Consulte aquí para obtener un informe detallado sobre lo que está sucediendo .

codenamev
fuente
Esto solo funcionó después de un enlace simbólico manual libreadline.8.dylibcon el libreadline.7.dylibque faltaba. es decir, ejecutar comando:ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
David Schumann
0

Mi problema era el mismo cuando corría lftp.

Simplemente ejecutar brew upgradeha resuelto mi problema, ya que se ha actualizado (entre otros):

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

Antecedentes: esto sucedió cuando intenté instalar tig, pero creo que este es un problema común que puede tener y que necesita vincular manualmente el software instalado en la ruta correcta que otro software desea.

Si no puede encontrar readline instalado en su Mac, debe ejecutar

brew install readline

Después de instalar la fecha límite, brew le pedirá que lo vincule. Pero en realidad no se puede vincular ejecutando

brew link readline

Incluso tu no puedes enlazar corriendo

sudo brew link readline

Mac OS le advertirá que esto es extremadamente peligroso y le impedirá hacerlo.

La última versión de readline es la versión 8, por lo que verá un mensaje de error como

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

La fecha límite de instalación de la cerveza en

/usr/local/Cellar/readline/8.0.4

Por lo tanto, debe vincularlo manualmente al lugar que desea su software mediante el comando ls

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

¡Disfrutar!

Eric Wu
fuente