250

我刚刚用自制软件安装了 posgresql,当我继续输入命令时

psql

我收到以下错误:

dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.6.2.dylib
Referenced from: /usr/local/bin/psql
Reason: image not found
[1]    69711 trace trap  psql

有谁知道出了什么问题?

4

22 回答 22

386

我得到了完全相同的错误,但上述答案对我不起作用。我不得不重新安装postgresql。

brew reinstall postgresql

于 2016-09-29T23:21:03.083 回答
133

关键问题是您的 postgresql 试图找到libreadline.6.2.dylib但您的readlineis version 7.0,所以只有 7 的 lib 被链接。

我不认为升级 postgresql 是一个好主意,这并不容易并且可能会导致很多问题,尤其是当您已经拥有数据库数据时。

我所做的是切换readline. 当你检查时brew info readline,你会发现不同的版本,我的是6.3.8,所以我通过执行切换到那个版本:

$ brew switch readline 6.3.8

它将更改为 6.3.8 并创建链接:

Cleaning /usr/local/Cellar/readline/6.3.8
Cleaning /usr/local/Cellar/readline/7.0.1
Opt link created for /usr/local/Cellar/readline/6.3.8

在这种情况下,所有链接的库都变为 6 版本,命令行工作:

$ ls /usr/local/opt/readline/lib/
libhistory.6.2.dylib    libhistory.dylib    libreadline.a
libhistory.6.3.dylib    libreadline.6.2.dylib   libreadline.dylib
libhistory.6.dylib  libreadline.6.3.dylib
libhistory.a        libreadline.6.dylib

但是,如果您有不同的应用程序使用不同版本的 readline,我认为您应该考虑升级。


更新:2019 年 6 月 2 日

如果没有安装旧版本怎么办?

Homebrew不提供安装旧版本公式的方法。从 v2.0.0 开始,它将brew cleanup作为默认行为每 30 天运行一次。因此,您可能会不小心更新brew和删除旧版本。

以下是安装旧版本的步骤:

  1. 进入homebrew-core目录:
    $ cd $(brew --repository)/Library/Taps/homebrew/homebrew-core
  1. 检查旧公式的哈希:
    $ git log master -- Formula/readline.rb
  1. 找到对应版本的哈希值
    commit 1dd4221c35716d6bec363ad3425ef93ffe7d9b9f
    Author: BrewTestBot <brew-test-bot@googlegroups.com>
    Date:   Wed Aug 15 21:51:16 2018 +0000

        readline: update 7.0.5 bottle.
  1. 结帐到旧公式:
    $ git checkout 1dd4221c35716d6bec363ad3425ef93ffe7d9b9f Formula/readline.rb
  1. 重新安装公式:
    $ brew reinstall readline
  1. 重置回购

按照这些步骤,您可以重新安装旧版本的公式。

于 2017-01-05T02:47:23.797 回答
79

如果情况是你有更高版本的 readline 说 7.0. 你可以这样做

cd /usr/local/opt/readline/lib    
ln libreadline.7.0.dylib libreadline.6.2.dylib
于 2016-11-11T07:34:19.117 回答
46

如果您没有安装 readline,请先安装它:

brew install readline

对我来说,我收到了这个错误,即使我安装了 readline。重新安装 readline 就可以了:

brew reinstall readline
于 2014-03-05T19:34:16.423 回答
32

这对我有用

brew switch readline

这将显示您已安装的版本。从他们中挑选一个。我选择了 7.0.5

然后我跑了

brew switch readline 7.0.5

readline 版本已更新,psql运行流畅。

于 2018-12-11T12:04:39.427 回答
23

这对我有用

ln -s /usr/local/opt/readline/lib/libreadline.7.0.dylib /usr/local/opt/readline/lib/libreadline.6.dylib
于 2017-03-29T07:24:13.167 回答
20

解决方法是再次强制链接readline。

brew remove readline
brew install readline
brew link readline --force
于 2014-09-29T07:59:59.620 回答
14

在我看来,问题在于更新 readline 包。在我的情况下,postgres 尝试使用 /usr/local/opt/readline/lib/libreadline.7.dylib。所以我刚刚创建了一个指向现有版本库 /usr/local/opt/readline/lib/libreadline.8.dylib 的符号链接。

为我工作:

ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
于 2019-02-20T15:14:37.920 回答
8

这些解决方案都不适合我。我不得不跑:

brew upgrade bash

来自:https ://github.com/Homebrew/homebrew-core/issues/5799

于 2016-10-24T09:33:41.327 回答
6

上面的答案对我不起作用,所以我想发布最终起作用的答案。基于我在这里找到的一个线程,我不得不卸载 readline 并再次安装它,但从源代码。

brew uninstall readline
brew install --build-from-source readline

之后 psql 错误消失了。

于 2014-07-24T18:33:32.767 回答
5

我遇到了这个问题,对我来说关键是reinstall同时使用readlinepostgres. 重新安装 postgres 后,问题就解决了。

于 2016-10-11T14:17:38.953 回答
5

修复 psql 的另一种方法是更新刚刚运行 brew upgrade postgresql的 postgresql,因为最新版本将使用 readline 7 版本。

于 2017-02-22T13:45:56.637 回答
4

我尝试了所有这些终端命令,但没有任何效果,所以决定手动修复它。

打开 finder 并点击 command+shift+g

Go to this folder /usr/local/opt/readline/lib/

您应该会看到这些文件的多个版本

libreadline.6.dylib
libreadline.7.0.dylib

将其中任何一个重命名为未加载的任何库

this is: /usr/local/opt/readline/lib/libreadline.6.2.dylib
mine was: /usr/local/opt/readline/lib/libreadline.6.dylib
于 2016-11-11T20:11:52.123 回答
4

当我意外地将 readline 更新到版本 7 时,我遇到了这个问题。我卸载了 readline 和 brew 提醒我 6.3.8 仍然安装。似乎版本 7 目前无法与 PSQL 一起使用。

于 2016-10-11T12:01:00.927 回答
3

我尝试了所有预览答案,但没有任何效果。唯一对我有用的是:

brew link postgresql

于 2017-02-23T15:14:45.997 回答
3

以下命令对我有用:

brew reinstall postgresql
brew postgresql-upgrade-database
于 2020-02-13T09:02:36.527 回答
2

这对我有帮助:卸载所有 readline 和 postgresql

导出 CPPFLAGS=-I/usr/local/opt/readline/include 导出 LDFLAGS=-L/usr/local/opt/readline/lib

并安装 posqtgresql

于 2016-10-01T11:56:37.570 回答
1

我发现这个解决方案很有帮助

brew upgrade bash

https://github.com/Homebrew/homebrew-core/issues/5799

于 2016-11-02T07:55:44.800 回答
0

出于某种未知原因,当下一版本的 Readline 出现此错误时,无论我如何符号链接,我的 RVM 似乎都无法找到正确的,抛出:

Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib (LoadError)

我最终将 gem 添加rb-readline到我的 Gemfile 并做另一个bundle install,它开始工作。

我……只是不知道。

于 2018-05-23T23:39:47.633 回答
0

你可以试试看brew doctor它说什么。

可能您所需要的只是brew link --overwrite bash.

对我来说,我刚刚升级了 brew,因为 OS X EL Capitan 进行了一些影响我的/usr文件夹的安全升级。在 brew 升级期间,bash 链接被破坏,这就是brew doctor告诉我的。

所以我只是跑步brew link --overwrite bash,一切都很好。

于 2016-10-20T02:41:40.500 回答
0

您可能想检查是否有其他符号链接到postgresql. 我之前已链接到postgres93包,截至 17 年 5 月,该包不受支持并已被删除。删除该链接然后重新链接对我有用:

brew unlink postgresql93
brew link postgresql
于 2017-05-30T18:34:08.683 回答
0

在我的情况下,正确的答案并没有解决问题。

问题在运行brew doctor并添加export PATH="/usr/local/bin:$PATH"到我的 ~/.zshrc 文件后开始。

移除

export PATH="/usr/local/bin:$PATH" 

~/.zshrc得到它解决。

于 2018-03-09T03:15:22.617 回答