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


239

我刚用自制软件安装了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

有谁知道怎么了吗?


1
看起来它链接到了readline,但是它不存在。之后您是否卸载了readline?如何准确你有自制软件安装PostgreSQL?(步骤,commandS)。
克雷格·林格

1
可能是由stackoverflow.com/questions/42356309/…解决的,它的答案比下面的大多数答案更简洁(您可能不需要重新安装postgres!)
thclark

Answers:


373

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

brew reinstall postgresql


5
这是在Capitan
Sebastian Sastre

6
我的问题似乎与使用brew安装python有关
Guyarad

6
如果您尚未安装最新版本的Postgres,请务必谨慎。您需要将旧的Postgres与新的Postgres一起重新安装,然后执行pg_upgrade
dazonic

7
如果您不想丢失本地数据库,这将是很费力的。我的“酿酒开关阅读线6.3.8”很幸运
Christopher Johnson

4
如果您认为重新安装psql是看似小的bug的根本步骤,那么您并不孤单。这个答案:stackoverflow.com/a/41476592/839876似乎解决了大多数这些答案都可以解决的真正问题。
frandroid

127

关键问题是您的postgresql试图查找,libreadline.6.2.dylib但您readline是版本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

在这种情况下,所有链接的lib都变为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的应用程序不同,我认为您应该考虑升级。


更新:06/02/2019

如果未安装旧版本怎么办?

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. 重置仓库

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


1
而我-如果您对readline 7没有其他依赖性,那么这绝对是破坏性最小的方法。
画了

这对我也有效,使我免于更新邮资
Rich Rich

也为我工作...比更新整个数据库要干净得多的解决方案
处决

什么时候要切换回readline安装的其他任何版本?这样做还有什么其他弊端?
肯尼·埃维特

我只安装了一个readline,而我的readline本地检出仅包含8.0,即使获取了所有内容,日志也没有任何较旧的版本提交。似乎无法为我安装旧版本的readline,并且升级postgres可能是唯一的选择
Andy Ray

78

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

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

5
我必须创建名为“ libreadline.6.dylib”的链接,但这是唯一对我有用的建议。
Mads Hoel

1
brew uninstall --force gawk然后结合起来,然后brew install gawk才开始运行。您也许也可以做到brew reinstall --force gawk
Csteele5

1
好一个 我正在运行postgres 10.6,它期望使用libreadline.7.dylib,但是我刚刚安装pg_top了将libreadline升级到8.0并破坏了psql的程序。我用过你的把戏,只是使它成为一个符号链接 ln -s libreadline.8.0.dylib libreadline.7.dylib
达沃斯

太好了,谢谢。这可以在MacOS Mojave上运行,而不必卸载并重新安装PostgreSQL(这真是很痛苦)。
crmpicco

46

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

brew install readline

对我来说,即使我已安装readline,也遇到了此错误。重新安装readline可以达到目的:

brew reinstall readline

6
重新安装readline并非对我有用,但卸载/安装bash确实可以:brew install --build-from-source bash
whatbird 2014年

我发现我必须先删除readline的所有版本(棕色卸载--force readline)。重新安装后,我不得不用“ brew link --force readline”强制链接它
Wilhelm

重新安装bash也是我的解决方法,但是在我的情况下,“引用自”行专门提到了bash。
mbafford '16

安装MacOS Sierra后,我一直遇到此问题。我同时做了brew reinstall readline(以获取Sierra特有的啤酒),而在此期间, brew reinstall postgresql94。人们说要重新安装bash,但我从没有开始过。所以这个答案和选择的答案都对我有用。
risa_risa '16

brew reinstall readline在切换到其他版本(过去有效)后对我有用,在升级到psql9.6后不再起作用
bkunzi01

31

这对我有用

brew switch readline

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

然后我跑了

brew switch readline 7.0.5

readline版本已更新,并且psql运行平稳。


2
也为我工作。psql试图加载libreadline.7.dylib,但是我正在使用readline 8.0.0。从8.0.0切换到7.0.5可以解决此问题。我希望,如果我想继续使用8.0.0,创建符号链接(就像其他人所做的一样)也可以。但是将新版本链接到旧版本会产生误导,并可能导致其他问题。
丹尼斯,

您是如何找到这个解决方案的?我印象深刻!
kuzdu

1
我尝试了相同的操作,但收到以下错误:readline在地窖中没有版本“ 7.0.5”。我尝试了brew install 7.0.5 readline,但显示以下错误:没有名称为“ 7.0.5”的可用公式。@ Dennis
Mahesh Mesta

23

这对我有用

ln -s /usr/local/opt/readline/lib/libreadline.7.0.dylib /usr/local/opt/readline/lib/libreadline.6.dylib

这也是我的问题。我没有使用brew,并且在最新更新后丢失了sym链接。谢谢!
马特

真好!我的确切错误抱怨6.2,我的命令略有不同。错误是dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.6.2.dylib,所以我用了ln -s /usr/local/opt/readline/lib/libreadline.7.0.dylib /usr/local/opt/readline/lib/libreadline.6.2.dylib
泰勒·科利尔


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

这对我有用。我使用的是psql版本9.6.3和readline8。–
lacostenycoder

诚然,这是解决问题的一种方法,但是在一些不相关的升级将我的readline版本从7升级到8之后,我遇到了这个问题,而我现在不想解决完整的Postgres重新安装问题。这是一个占地空间很小的解决方案,在读行中进行有意义的更改的风险似乎很小,所以我现在就继续进行下去。如果会导致任何问题,将进行报告。
斯科特·罗斯

感谢您的评论,我同意这个问题。更新到macos catalina之后,我遇到了很多问题,因此我不想深入研究这个问题,而是使用了该技巧。
Eugeny Maksimov


6

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

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

之后,psql错误消失了。



5

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


4

我偶然将readline更新到版本7时遇到了这个问题。我卸载了readline,并且brew提醒我仍安装了6.3.8。看来目前版本7不适用于PSQL。


4

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

打开查找器 并按 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

对我来说
效果

3

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

brew link postgresql


2

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

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

并安装posqtgresql




0

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

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

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

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


0

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

brew unlink postgresql93
brew link postgresql

0

就我而言,正确答案不能解决问题。

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

拆下

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

~/.zshrc解决它。


0

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

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

我最终将宝石添加rb-readline到我的Gemfile中,然后再做另一个bundle install,它开始起作用。

我...只是不知道。

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.