Biblioteca não carregada: /usr/local/opt/readline/lib/libreadline.7.dylib


112

Quando tento executar rails console, recebo este erro:

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

Uma pesquisa rápida me levou a este post e tentei algumas coisas:

brew reinstall postgresql (este é realmente o banco de dados para este projeto)

e

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

(minha versão do readline é 8)

e brew link readline --force

Mas nenhum desses consertou.

Recentemente pry-coolline, adicionei guarde guard-livereloadgems ao meu projeto, se isso faz alguma diferença (o console do Rails carregava bem antes desses). Estou usando os macos mais recentes.

(Atualização) Estou usando pry rails como meu console de trilhos, se isso faz alguma diferença.

Qualquer ajuda? Obrigado.


1
tentarbrew reinstall readline
MrYoshiji

não funcionou, obrigado
Jonathan Tuzman

Funcionou para mim @MrYoshiji! Obrigado!
Patrocine em

Respostas:


374

o erro parece ser lançado durante a pesquisa /usr/local/opt/readline/lib/libreadline.7.dylib.

Você já tentou criar um link simbólico para isso?

Então, algo como:

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

Experimentei isso no macOS Mojave, ruby ​​2.5.3p105 e Rails 5.2.2 e funcionou.


Obrigado Hawz. Eu apenas tentei e não funcionou. Acho que também já havia tentado isso. Devo dizer que esse link simbólico e lnnão são coisas sobre as quais eu realmente conheço: /
Jonathan Tuzman

5
Eu trabalhei para mim. Talvez @JonathanTuzman você não estivesse no bom diretório? cd /usr/local/opt/readline/lib
Ulysse BN

7
Tive que brew link readline --forcecriar os links em /usr/local/opt/readline/lib.
Candland

Eu daria a você +10 se pudesse. Obrigado!
eos87

A resposta real é brew link readline --forcede Candland, que funcionou para mim
Rakib Fiha

42

Reinstalar minha versão Ruby parece ter corrigido:

rvm reinstall 2.3.7

11
Esta é a resposta, se você usou o rvm para instalar o Ruby. Se a sua versão do ruby ​​for compilada com uma versão do readline que não existe mais no seu sistema, você deve recompilar o ruby ​​para vincular à nova versão. Acabei de me deparar com esse problema e tentei de tudo, exceto criar um link simbólico para readline.8.dylib para substituir readline.7.dylib (o que parece uma ideia realmente ruim, mesmo que pareça ter funcionado para quase todos, votando a favor dessa resposta .)
Kingdon

4
Eu uso rbenv e rbenv install 2.5.1funcionou para mim no meu contexto. Isso foi de lado depois de eu ter corrido sudo xcode-select -s /Library/Developer/CommandLineToolspara consertar um problema que estava enfrentando em outro lugar. fwiw
alguma direção em

1
Se você estiver usando o bundler, poderá posteriormente descobrir que precisa bundle installreinstalar as gemas com extensões nativas.
spume

27

você pode tentar

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

você está no caminho certo, mas parece que rails está procurando por libreadline.7.dylib e libreadline.7.dylib não está na pasta.


1
O problema reaparece quando eu executo o 'brew upgrade', mas a solução funciona bem e corrige-o
Iwan B.


7

Uma solução muito simples que não envolve a reconstrução de seu conjunto de gemas RVM OU bibliotecas de links simbólicos.

Adicione ao seu Gemfile:

gem 'rb-readline'

Se você estiver fazendo grupos de bundler

group :development do
  gem 'rb-readline'
end

Então corra

> bundle

Deixe-me saber se isso não funcionar.


4

Na maioria das vezes em aplicativos Ruby, isso é causado por gems que têm extensões (as gems dizendo "Construindo extensões nativas .."), que são construídas usando uma versão específica de, neste caso readline,.

Basicamente, existem duas soluções:

Você pode fazer um link simbólico da versão 8 da gema para a versão ausente. Isso funcionará em muitos casos, mas se a compatibilidade com versões anteriores for interrompida, não funcionará.

Ou, se a gem realmente suporta a versão 8, você pode reinstalar aquela gem específica, ou "intacta" executando gem pristine --all.

EDITAR : No escopo do seu "o que eu tentei", reinstalar o PostgreSQL, também está um dos binários, construído usando uma versão específica, que também pode exigir uma reconstrução, para funcionar com uma biblioteca do sistema, como readline.


Ack! Pristine também não consertou. Com que precisão devo reinstalar o PostgreSQL sem interromper nenhuma conexão com meu banco de dados atual? (claro que a resposta poderia ser "isso não é uma preocupação", pelo que eu sei sobre qualquer coisa).
Jonathan Tuzman

4

Tenho este problema:

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

fazendo ...

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

funcionou para mim para o macOS Catalina


2

Verifiquei algumas respostas aqui, mas não acho que elas funcionem com a instalação do Mac Vanilla Mojave. Estou usando 10.14.4 enquanto fazia estes:

  • obter homebrew em https://brew.sh

  • $ brew install coreutils: isso instala o pacote gnu coreutils para mac, queremos fazer greadlinkisso porque o readlink do macOSX não é o mesmo que o readlink do GNU. É extremamente confuso, mas essa é a vida em macland.

  • $ echo 'alias readlink=greadlink' >> ~/.bash_aliasesEu descobri que o readlink do macs está um pouco faltando, então eu substituí o readlink existente criando um alias para greadlink. (você pode tornar isso utilizável por todos os usuários, o $ alias readlink=greadlink >> /etc/bashrcque permitirá que cada usuário seja capaz de usá-lo.

  • $ ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib.8.Vinculei o arquivo já vinculado em vez de '.8.0.' porque se fosse para ser atualizado para .8.1.então meu link de leitura não quebraria ou perderia recursos na biblioteca. Tenho certeza que vamos formatar nossos macs antes do lançamento do 9+.


0

Eu não recomendaria criar links simbólicos manuais para bibliotecas nativas. Aas do OS X 10.4, o caminho da biblioteca de inclusão padrão /usr/includenão é mais usado e é bloqueado pelo SIP (tornando difícil mover as coisas).

A Apple envia um “instalador legado” para que você possa instalar os cabeçalhos no “local antigo”, o que também resolverá o seu caminho para localizar corretamente os cabeçalhos instalados 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`

Veja aqui um artigo detalhado sobre o que está acontecendo .


Isso só funcionou depois de libreadline.8.dylibcriar um link simbólico manual para o libreadline.7.dylibqual estava faltando. ou seja, comando de execução:ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
David Schumann

0

Meu problema era o mesmo durante a execução lftp.

Apenas correr brew upgradejá resolveu meu problema, pois foi atualizado (entre outros):

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

0

Contexto: Isso aconteceu quando tentei instalar o tig, mas acho que é um problema comum que você pode ter e que precisa vincular manualmente o software instalado ao caminho correto que outro software deseja.

Se você não conseguir encontrar readline instalado em seu Mac, você deve executar

brew install readline

Depois de instalar o deadline, o brew solicitará que você o vincule. Mas na verdade você não pode ligar executando

brew link readline

Mesmo você não pode ligar executando

sudo brew link readline

O Mac OS o avisará que isso é extremamente perigoso e o impedirá de fazer.

A última versão do readline é a versão 8, então você verá a mensagem de erro como

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

A cerveja instalada termina em

/usr/local/Cellar/readline/8.0.4

Portanto, você deve vinculá-lo manualmente ao local desejado pelo software usando o comando ls

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

Aproveitar!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.