122

当我尝试运行时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-coolline,guardguard-livereloadgems,如果这有什么不同的话(rails 控制台在这些之前加载得很好)。我正在运行最新的 macos。

(更新)我使用 pry rails 作为我的 rails 控制台,如果这有什么不同的话。

有什么帮助吗?谢谢。

4

11 回答 11

392

搜索时似乎抛出了错误/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 上尝试过,并且工作正常。

于 2019-01-21T10:30:25.547 回答
42

重新安装我的 Ruby 版本似乎已经修复了它:

rvm reinstall 2.3.7
于 2019-01-23T17:09:19.593 回答
38

你能试一下吗

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

您在正确的轨道上,但似乎 rails 正在寻找 libreadline.7.dylib 并且 libreadline.7.dylib 不在文件夹中。

于 2019-09-30T21:20:05.710 回答
18

是的,最好的答案是重新安装。

您可以通过键入以下内容轻松获取版本:

ruby -v

使用rbenv,命令为:

rbenv install 2.3.7

rvm

rvm reinstall 2.3.7
于 2019-05-08T18:02:38.857 回答
10

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

添加到您的 Gemfile:

gem 'rb-readline'

如果您正在做捆绑器组

group :development do
  gem 'rb-readline'
end

然后运行

> bundle

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

于 2019-11-21T15:35:02.473 回答
4

大多数情况下,在 Ruby 应用程序中,这是由具有扩展的 gem 引起的(这些 gem 说“构建本机扩展......”),这些扩展是使用特定版本构建的,在这种情况下,readline.

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

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

或者,如果 gem 确实支持版本 8,您可以重新安装该特定 gem,或者通过运行gem pristine --all.

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

于 2019-01-21T11:18:58.037 回答
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

于 2019-10-31T14:36:43.437 回答
2

背景:当我尝试安装 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

brew 安装截止日期为

/usr/local/Cellar/readline/8.0.4

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

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

享受!

于 2020-06-18T09:16:34.423 回答
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。

于 2019-04-17T05:09:15.653 回答
0

我建议不要手动符号链接本机库。从 OS X 10.4 开始,/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`

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

于 2019-07-16T17:21:07.283 回答
0

运行时我的问题是一样的lftp

刚刚运行brew upgrade解决了我的问题,因为它已经更新(除其他外):

readline 8.0.0_1 -> 8.0.1
lftp 4.8.4 -> 4.8.4_2
于 2019-10-20T07:56:56.060 回答