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

时间:2019-01-18 21:08:06

标签: ruby-on-rails libreadline

当我尝试运行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)

快速搜索使我进入this post,并且我尝试了一些事情:

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-coollineguardguard-livereload宝石(如果有什么区别的话)(在这些之前,rails console可以很好地加载)。我正在使用最新的macOS。

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

有帮助吗?谢谢。

11 个答案:

答案 0 :(得分:108)

搜索/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上进行尝试即可。

答案 1 :(得分:24)

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

rvm reinstall 2.3.7

答案 2 :(得分:12)

您可以尝试

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

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

答案 3 :(得分:4)

通常在Ruby应用程序中,这是由具有扩展名的宝石(宝石说“正在构建本机扩展..”)引起的,它们是使用特定版本的readline构建的。

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

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

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

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

答案 4 :(得分:3)

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

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

ruby -v

对于rbenv,命令为:

rbenv install 2.3.7

rvm

rvm reinstall 2.3.7

答案 5 :(得分:1)

解决了这个问题:

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

答案 6 :(得分:0)

因此,我在这里检查了一些答案,但我认为它们不能与香草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。

答案 7 :(得分: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`

See here for a detailed write-up on what is going on

答案 8 :(得分:0)

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

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

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

答案 9 :(得分:0)

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

添加到您的Gemfile中:

gem 'rb-readline'

如果您要进行捆绑器分组

group :development do
  gem 'rb-readline'
end

然后运行

> bundle

让我知道这是否无效。

答案 10 :(得分: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

享受!