Библиотека не загружена: /usr/local/opt/readline/lib/libreadline.6.2.dylib

239

Я только что установил posgresql с homebrew, и когда я продолжаю набирать команду

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

Кто-нибудь имеет представление о том, что не так?

hbejgel
источник
1
Похоже, это связано с readline, но это не присутствует. Вы потом удалили readline? Как именно вы установили PostgreSQL с помощью homebrew? (Шаги, команды S).
Крейг Рингер
1
Вероятно, решено с помощью stackoverflow.com/questions/42356309/…, который имеет более краткий ответ, чем большинство из приведенного ниже (вам, вероятно, не нужно переустанавливать postgres!)
thclark

Ответы:

374

Я получал точно такую ​​же ошибку, но приведенные выше ответы не сработали для меня. Мне пришлось переустановить postgresql.

brew reinstall postgresql

dafunkeemonkee
источник
5
Этот сделал это для меня на Эль-Капитане
Себастьян Састре
6
Кажется, моя проблема была связана с установкой python с использованием brew
guyarad
6
Будьте осторожны, если вы еще не используете последнюю версию Postgres. Вам нужно будет переустановить старый Postgres вместе с новым, а затем сделатьpg_upgrade
dazonic
7
Это очень тяжело, если вы не хотите потерять свои локальные базы данных. Мне повезло с «brew switch readline 6.3.8»
Кристофер Джонсон
4
Если вы думаете, что переустановка psql является радикальным шагом для решения проблемы, которая кажется маленькой ошибкой, вы не одиноки. Этот ответ: stackoverflow.com/a/41476592/839876, кажется, решает реальную проблему, которую обходят большинство из этих ответов.
frandroid
127

Ключевая проблема заключается в том, что ваш postgresql пытался найти, libreadline.6.2.dylibно ваша readlineверсия есть 7.0, так что связана только библиотека 7.

Я не думаю, что обновление 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, я думаю, вам стоит подумать об обновлении.


Обновление: 02/02/2019

Что делать, если старая версия не установлена?

Homebrewне предоставляет способ установить формулу старой версии. А начиная с версии 2.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
Сработало для меня тоже ... гораздо более чистое решение, чем обновление всей базы данных
sromit
Когда кто-то захочет вернуться к какой-либо другой версии, readlineкоторая была установлена? Какие еще недостатки есть в этом?
Кенни Эвитт
У меня установлена ​​только одна readline, и моя локальная проверка readline содержит только 8.0, и в журнале нет коммитов более старой версии, даже после загрузки всего. Похоже, невозможно установить более старую версию readline для меня, и единственной возможностью может быть обновление postgres
Энди Рэй
78

Если ситуация такова, у вас есть версия readline более поздней версии, скажем, 7.0. Ты можешь сделать это

cd /usr/local/opt/readline/lib    
ln libreadline.7.0.dylib libreadline.6.2.dylib
Анви Чжан
источник
5
Мне пришлось создать ссылку с именем "libreadline.6.dylib", но это было единственное предложение, которое сработало для меня.
Мадс Хоэл
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
Я обнаружил, что сначала мне пришлось удалить все версии readline (brew uninstall --force readline). После того, как я переустановил его, мне пришлось принудительно связать его с «brew link --force readline»
Вильгельм,
Переустановка bash также была для меня исправлением, но в моем случае строка «ссылка из» упоминала bash специально.
mbafford
После установки MacOS Sierra я столкнулся с этой проблемой. Я сделал так brew reinstall readline(чтобы получить Сьерра-специфический напиток) и в то время как у него, brew reinstall postgresql94. Люди говорили, чтобы переустановить Bash, но у меня никогда не было этого с самого начала. Так что этот ответ и выбранный ответ оба работали для меня.
risa_risa
brew Reinstall
Readline
31

Это сработало для меня

brew switch readline

Это будет отображать версии, которые вы установили. Выберите один из них. Я выбрал 7.0.5

Я тогда побежал

brew switch readline 7.0.5

Версия readline была обновлена ​​и psqlработала без сбоев.

sindhu_sp
источник
2
Также работал для меня. PSQL пытался загрузить libreadline.7.dylib, но я использовал readline 8.0.0. Переход с 8.0.0 на 7.0.5 решил проблему. Я ожидаю, что создание символической ссылки (как это сделали другие) также будет работать, если я захочу остаться на 8.0.0. Но наличие более новой версии ссылки на более старую версию вводит в заблуждение и может вызвать другие проблемы.
Деннис
Как вы нашли это решение? Я очень впечатлен!
Кузду
1
Я попробовал то же самое, но получил следующую ошибку: readline не имеет версии "7.0.5" в подвале. Я попытался установить bline 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.
Тайлер Коллиер
20

Решение состоит в том, чтобы снова заставить ссылку readline.

brew remove readline
brew install readline
brew link readline --force
Алекс Палкуе
источник
У меня не работает relink, но переустановка postgresql сработала.
Константин Тихонов
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 и readline 8.
lacostenycoder
По общему признанию, это хакерский способ исправить проблему, но я столкнулся с этой проблемой после того, как некоторые несвязанные обновления подняли мою версию readline с 7 до 8, и полная переустановка Postgres не была тем, чем я хотел заняться прямо сейчас. Это небольшое решение, и риск каких-либо значительных изменений в readline кажется небольшим, поэтому я сейчас с этим и продолжу. Будет сообщать, если это вызывает какие-либо проблемы в будущем.
Скотт Рот
Спасибо за комментарий, я согласен с этим вопросом. У меня было много проблем после обновления до macos catalina, поэтому я не хотел копаться в этом вопросе и использовал хак.
Евгений Максимов
8

Ни одно из этих решений не сработало для меня; Я должен был бежать:

brew upgrade bash

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

Энтони Даанн
источник
в моем эль-капитане после обновления до 10.11.6 эта ошибка тоже появлялась каждый раз, когда открывалось приложение терминала, уже решенное обновлением bash
azul
6

Ответ выше не работал для меня, поэтому я хотел опубликовать то, что в итоге сработало. Основываясь на теме, которую я нашел здесь , мне пришлось удалить readline и установить его снова, но из исходного кода.

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

После этого ошибка psql ушла.

Марк Прус
источник
5

У меня была эта проблема, и ключом для меня было reinstallи то readlineи другое postgres. После переустановки postgres проблема была решена.

Мика Бейлс
источник
5

Другой способ исправить psql - это просто запустить обновление postgresql, так brew upgrade postgresqlкак в последней версии будет использоваться версия readline 7.

zegomesjf
источник
4

У меня была эта проблема, когда я случайно обновил readline до версии 7. Я удалил readline и brew напоминает мне, что 6.3.8 все еще установлен. Кажется, что версия 7 не работает с PSQL в настоящее время.

Юаньци Цао
источник
4

Я попробовал все эти команды терминала, и ничего не получилось, поэтому решил исправить это вручную ..

Откройте искатель и нажмите Ctrl + 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
Принц Абалогу
источник
Хорошо работает для меня
mike_dz
3

Я перепробовал все предварительные ответы, но ничего не получалось. Единственное, что действительно сработало для меня, было:

brew link postgresql

finx
источник
2

Это помогло мне: удалите все readline и postgresql

экспорт CPPFLAGS = -I / usr / local / opt / readline / включить экспорт LDFLAGS = -L / usr / local / opt / readline / lib

и установите posqtgresql

ph4n70m
источник
2

Следующие команды работали для меня:

brew reinstall postgresql
brew postgresql-upgrade-database
Ниланш Бансал
источник
0

Вы можете попробовать brew doctorи посмотреть, что он говорит.

Возможно, все, что вам нужно, это brew link --overwrite bash.

Для меня я только что обновил brew, так как в OS X EL Capitan было несколько обновлений безопасности, которые защищают мою /usrпапку. Во время обновления brew ссылка на bash не работает, и это то, что brew doctorмне говорит.

Так что я просто бегаю brew link --overwrite bashи все хорошо.

Hustlion
источник
0

Возможно, вы захотите проверить, есть ли у вас что-нибудь еще символическая ссылка на postgresql. Ранее я связывался с пакетом postgres93 , который по состоянию на май 17 года не поддерживается и был удален. Удаление этой ссылки, а затем перекомпоновка работали для меня:

brew unlink postgresql93
brew link postgresql
sp89
источник
0

В моем случае правильный ответ не решил проблему.

Проблема началась после запуска brew doctorи добавления export PATH="/usr/local/bin:$PATH"в мой файл ~ / .zshrc.

Удаление

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

из ~/.zshrcполучил это решено.

user9869932
источник
0

По какой-то неизвестной причине, когда эта ошибка появилась для следующей версии Readline, мой RVM, казалось, был не в состоянии найти нужный, независимо от того, как я его символизировал, выдавая:

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

Я закончил тем, что добавил драгоценный камень rb-readlineв свой Gemfile и сделал другой, bundle installи он начал работать.

Я ... просто не знаю.

Эрик Траутман
источник