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


112

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

/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 link readline --force

但是这些都没有解决它。

我最近添加了pry-coollineguard并将guard-livereloadgems 添加到我的项目中(如果有什么不同的话)(在这些之前,rails console加载良好)。我正在使用最新的macOS。

(更新)我将撬轨用作滑轨控制台,如果有什么不同的话。

有什么帮助吗?谢谢。


1
尝试brew reinstall readline
MrYoshiji

没用

为我工作@MrYoshiji!谢谢!
斯潘

Answers:


374

搜索时似乎抛出了错误/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上进行了尝试并成功运行。


谢谢霍兹。我只是尝试过,但没有成功。我想我也曾经尝试过。我必须说,虽然这个符号链接ln不是我真正了解的东西:/
Jonathan Tuzman

5
我确实为我工作。也许@JonathanTuzman您不在好目录中?cd /usr/local/opt/readline/lib
Ulysse BN

7
必须在brew link readline --force中创建链接/usr/local/opt/readline/lib
Candland

如果可以的话,我会给你+10。谢谢!
eos87

真正的答案是brew link readline --force对我
有用的Candland

42

重新安装我的Ruby版本似乎已将其修复:

rvm reinstall 2.3.7

11
如果您使用rvm安装ruby,这就是答案。如果您的ruby版本是根据系统上不再存在的readline版本编译的,则应重新编译ruby以链接到新版本。我本人只是遇到了这个问题,并尝试了将符号链接readline.8.dylib替换为readline.7.dylib的所有方法(这似乎是一个非常糟糕的主意,即使它似乎对大多数人都有效,也支持该答案) 。)
金登

4
rbenv install 2.5.1在我的上下文中,我使用rbenv并为我工作。在我sudo xcode-select -s /Library/Developer/CommandLineTools试图解决我在其他地方遇到的问题之后,这种情况就横摆了。fwiw
somedirection

1
如果您使用捆绑程序,则可能随后发现需要bundle install重新安装具有本机扩展的gem。
泡沫

27

你能试一下吗

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


6

一个非常简单的解决方案,不涉及重建RVM gemset或符号链接库。

添加到您的Gemfile:

gem 'rb-readline'

如果您要进行捆绑器分组

group :development do
  gem 'rb-readline'
end

然后跑

> bundle

让我知道那是否行不通。


4

通常在Ruby应用程序中,这是由具有扩展名的宝石(称为“正在构建本机扩展..”的宝石)造成的,在这种情况下,这些宝石是使用特定版本的 readline

基本上,有两种解决方案:

您可以将gem的版本8符号链接到缺少的版本。这在许多情况下都可以使用,但是如果向后兼容性被破坏,则不会。

或者,如果gem实际上支持版本8,则可以重新安装该特定的gem,或者通过运行来使其“原始” gem pristine --all

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


阿克!原始也没有修复它。在不断开与当前数据库的任何连接的情况下,应该如何精确地重新安装PostgreSQL?(据我所知,答案当然可能是“这不是问题”)。
乔纳森·图兹曼

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帮了我大忙


2

因此,我已经在这里检查了一些答案,但我认为它们无法与香草Mojave mac安装一起使用。我在执行这些操作时使用的是10.14.4:

  • https://brew.sh获取自制

  • $ brew install coreutils:这将为Mac安装gnu coreutils pkg,我们需要安装该greadlink软件包,因为macOSX的readlink与gnu readlink不同。它极其令人困惑,但是在澳门的生活就是这样。

  • $ echo 'alias readlink=greadlink' >> ~/.bash_aliases我发现macs 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+发布之前格式化Mac。


0

我建议不要手动符号链接本机库。OS X 10.4的Aas,标准包含库路径/usr/include已不再使用,并且已被SIP锁定(因此很难将内容移入)。

Apple为您提供了一个“旧版安装程序”,使您能够在“旧位置”中安装标头,这也将解析您的路径,以正确查找通过安装的标头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`

有关正在发生的事情的详细记录,请参见此处


这仅在手动符号链接libreadline.8.dyliblibreadline.7.dylib丢失的链接后才有效。即运行命令:ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
David Schumann


0

背景:当我尝试安装tig时发生了这种情况,但是我认为这是一个常见问题,您可能需要手动将已安装的软件链接到另一个软件所需的正确路径。

如果找不到Mac上安装的readline,则应运行

brew install readline

在安装截止日期后,brew将要求您链接它。但是实际上您无法通过运行链接

brew link readline

即使您无法通过运行链接

sudo brew link readline

Mac OS会警告您这非常危险,并阻止您这样做。

readline的最新版本是版本8,因此您将看到类似以下的错误消息

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

啤酒的安装截止日期为

/usr/local/Cellar/readline/8.0.4

因此,您必须使用命令ls手动将其链接到软件所需的位置

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

请享用!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.