库未加载:/usr/local/opt/readline/lib/libreadline.7.dylib

123

当我尝试运行rails console时,出现以下错误:

"When I try running rails console I get this 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)

我通过快速搜索找到了这篇帖子,我尝试了几个方法:

brew reinstall postgresql(这确实是该项目的数据库)

以及

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

(我的readline版本是8)

尝试了以下方法,但都没有解决问题:

brew install readline

gem pristine --all

brew link readline --force

我最近向我的项目中添加了 pry-coollineguardguard-livereload 宝石,不知道是否有影响(在添加这些之前,rails console一直能正常加载)。我正在最新的macOS上运行。

(更新) 我正在使用 pry rails 作为我的 rails console,不知道是否有影响。

请问有什么帮助的方法吗?谢谢。


1
尝试运行 brew reinstall readline - MrYoshiji
没有起作用,谢谢。 - Jonathan Tuzman
对我有用,@MrYoshiji!谢谢! - Spons
11个回答

397

当搜索 /usr/local/opt/readline/lib/libreadline.7.dylib 时,似乎出现了错误。

你尝试过使用符号链接吗?

像这样做:

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

我在 macOS Mojave 上尝试了一下,使用 ruby 2.5.3p105 和 Rails 5.2.2,它可以正常工作。


谢谢Hawz。我刚试了一下,但是没有成功。我想我之前也试过这个方法。不过我必须说,符号链接和ln并不是我真正了解的东西 :/ - Jonathan Tuzman
6
我为自己工作了。也许@JonathanTuzman你没有进入正确的目录?cd /usr/local/opt/readline/lib - Ulysse BN
7
必须执行 brew link readline --force 命令以在 /usr/local/opt/readline/lib 中创建链接。 - Candland
真正的答案是 Candland 的 brew link readline --force,这对我起作用了。 - Rakib Fiha
1
在OSX中引发此错误的根本问题是什么? - Daniel Viglione
显示剩余2条评论

43
重新安装我的Ruby版本似乎已经解决了这个问题:
rvm reinstall 2.3.7

12
如果您使用rvm安装了Ruby,则以下是答案。如果您的Ruby版本编译时使用的readline版本在您的系统上不再存在,则应重新编译Ruby以链接到新版本。我自己遇到了这个问题,并尝试了所有方法,但没有尝试将readline.8.dylib符号链接为readline.7.dylib(即使似乎对大多数人都有效,也似乎是一个非常糟糕的主意,只有那个答案被最多赞同)。 - Kingdon
4
在我的环境中,我使用rbenv并运行rbenv install 2.5.1安装成功。但是,在解决另一个问题时,我运行了sudo xcode-select -s /Library/Developer/CommandLineTools之后,这个安装就出了问题。顺便说一下。 - somedirection
1
如果您正在使用Bundler,那么您可能随后会发现需要运行bundle install以重新安装带有本地扩展的gem。 - spume

41

你能试试吗

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

你走在正确的轨道上,但似乎Rails正在寻找libreadline.7.dylib,而该文件夹中没有libreadline.7.dylib。


1
当我运行“brew upgrade”时,问题会再次出现,但是这个解决方案很好地解决了它。 - Iwan B.

19

是的,最好的解决方案是重新安装。

您可以通过输入以下命令轻松获取版本:

ruby -v

使用rbenv时,对应的命令为:

rbenv install 2.3.7

使用rvm:

rvm reinstall 2.3.7

运行 rbenv install <ruby-version> 失败,报错信息为 "rake" from rake conflicts with installed executable from redis-rack 冲突。我不得不运行 rbenv uninstall <ruby-version> && rbenv install <ruby-version> - Hirurg103
在我的OSX系统中也解决了我的问题。 - cool_php

12

一种非常简单的解决方案,不需要重建RVM gemset或符号链接库。

将以下内容加入您的Gemfile:

gem 'rb-readline'

如果你正在进行Bundler分组

group :development do
  gem 'rb-readline'
end

然后运行

> bundle

如果这不起作用,请告诉我。


1
如果你有多个正在运行的项目需要不同版本的 Ruby,并导致本地 lib 版本冲突,那么这是一个非常好的解决方案。酷! - MDickten

5
通常在 Ruby 应用程序中,这是由于具有扩展(指那些显示“构建本机扩展...”的宝石)的宝石使用了特定版本的库,例如此例中的 readline 库。

基本上,有两种解决办法:

一种是将宝石的版本 8 的符号链接到缺失的版本。这在许多情况下都有效,但如果向后兼容性被破坏,就不会起作用。

另一种是,如果宝石实际支持版本 8,则可以重新安装该特定宝石或通过运行gem pristine --all 将其还原为原始状态。

编辑:在你尝试的范围内,重新安装 PostgreSQL,也是使用特定版本构建的二进制文件之一,可能需要重新构建以便与系统库(如 readline)一起使用。

啊!Pristine也没有修复它。我应该如何精确地重新安装PostgreSQL,而不会破坏与当前数据库的任何连接?(当然答案可能是“这不是一个问题”,就我所知道的任何事情而言)。 - Jonathan Tuzman
问题实际上是找出哪个 gem 是罪魁祸首。我已经能够通过符号链接解决该问题,但这种解决方案对我来说感觉像是一种不安全的紧急修复。我应该如何找出哪个 gem 使用了 readline.dylib? - MDickten

4

我遇到了这个问题:

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

正在进行中...

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

这个方法对我在macOS Catalina上解决了问题。


3
背景:我在尝试安装tig时遇到了这个问题,但我认为这可能是一个常见问题,你需要手动将已安装的软件链接到另一款软件所需的正确路径。
如果您无法在Mac上找到readline安装程序,则应运行:
brew install readline

安装Deadline后,brew将要求您进行链接。 但实际上,您不能通过运行以下命令来进行链接

brew link readline

即使你不运行也无法链接

sudo brew link readline

如果您使用Mac OS,系统会警告该操作非常危险,并阻止您执行。

readline的最新版是8版本,所以您可能会看到以下错误信息:

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

在brew中安装deadline:

/usr/local/Cellar/readline/8.0.4

所以你需要使用命令ls手动将其链接到软件想要的位置

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

尽情享受!


2
最后一行让我欣喜若狂。 - iWheelBuy

2

我看了一些答案,但我认为它们不能适用于Vanilla Mojave Mac安装。 我使用的是10.14.4,下面是我所做的操作:

  • https://brew.sh获取homebrew

  • $ brew install coreutils:这将安装mac的gnu coreutils pkg,我们想要来自其中的greadlink,因为macOSX的readlink与gnu readlink不同。 这非常困惑,但这就是在macland中生活的方式。

  • $ echo 'alias readlink=greadlink' >> ~/.bash_aliases我发现mac的readlink有点不足,所以通过别名greadlink覆盖了现有的readlink。(您可以通过 $ alias readlink=greadlink >> /etc/bashrc 使其对所有用户可用,这将使每个用户都能够使用它)。

  • $ ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib我链接了已经链接过的.8.文件而不是'.8.0.'文件,因为如果它被更新为 .8.1.,那么我的readlink不会断裂或错过库的功能。 我相当肯定我们会在9+发布之前格式化我们的macs。


原始答案:Original Answer

0

当我运行lftp时,我的问题也是一样的。

只需运行brew upgrade即可解决我的问题,因为它已更新(包括其他内容):

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接