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

112

Когда я пытаюсь запустить, 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

(моя версия строки чтения - 8)

и brew link readline --force

Но ни один из них не исправил это.

Недавно я добавил pry-coolline, guardи guard-livereloadдрагоценные камни в мой проект , если это делает никакой разницы (рельсы консоли загружен штраф перед теми). Я использую последнюю версию macos.

(Обновление) Я использую направляющие в качестве консоли для направляющих, если это имеет значение.

Любая помощь? Спасибо.

Джонатан Тузман
источник
1
попробуйтеbrew reinstall readline
MrYoshiji
не сработало, спасибо
Джонатан Тузман
Работал для меня @MrYoshiji! Спасибо!
Спонсирует

Ответы:

377

ошибка, кажется, выдается при поиске /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 и работал.

Hawz
источник
Спасибо, Хоуз. Я просто попробовал, но ничего не вышло. Думаю, я пробовал это раньше. Я должен сказать, что эта символическая ссылка и lnне являются тем, о чем я на самом деле ничего знаю: /
Джонатан Тузман
6
Я работал на себя. Может быть, @JonathanTuzman, ты был не в хорошем каталоге? cd /usr/local/opt/readline/lib
Ulysse BN
7
Пришлось brew link readline --forceсоздать ссылки в /usr/local/opt/readline/lib.
Candland
Я бы дал тебе +10, если бы мог. Спасибо!
eos87
Настоящий ответ - brew link readline --forceCandland, который сработал для меня
Ракиб Фиха
42

Переустановка моей версии Ruby, похоже, устранила это:

rvm reinstall 2.3.7
Джонатан Тузман
источник
11
Это ответ, если вы использовали rvm для установки ruby. Если ваша версия ruby ​​скомпилирована с версией readline, которой больше нет в вашей системе, вам следует перекомпилировать ruby, чтобы связать ее с новой версией. Я сам столкнулся с этой проблемой и пробовал все, кроме символической ссылки на readline.8.dylib, чтобы заменить readline.7.dylib (что кажется действительно плохой идеей, даже если кажется, что это сработало для большинства, поддерживая этот ответ .)
Kingdon
4
Я использую rbenv, и rbenv install 2.5.1в моем контексте у меня работает. Это пошло не так, как только я побежал sudo xcode-select -s /Library/Developer/CommandLineToolsисправить проблему, с которой я столкнулся в другом месте. fwiw
somedirection
1
Если вы используете бандлер, вы впоследствии можете обнаружить, что вам нужно bundle installпереустановить драгоценные камни с собственными расширениями.
Спум
27

ты можешь попробовать

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

вы на правильном пути, но похоже, что rails ищет libreadline.7.dylib, а libreadline.7.dylib отсутствует в папке.

Эришао
источник
1
Проблема появляется снова, когда я запускаю 'brew upgrade', но это решение работает нормально и исправляет его
Иван Б.
17

Да, лучший ответ - переустановить.

Вы можете легко получить версию, набрав:

ruby -v

С rbenvкоманда, то есть:

rbenv install 2.3.7

с rvm:

rvm reinstall 2.3.7
FreePender
источник
Не rbenv install <ruby-version>удалось запустить с "rake" из-за конфликта rake с установленным исполняемым файлом из-за конфликта redis-rack . Мне пришлось бежатьrbenv uninstall <ruby-version> && rbenv install <ruby-version>
Hirurg103
7

Очень простое решение, которое не требует перестройки вашего гемсета RVM ИЛИ символьных библиотек.

Добавьте в свой Gemfile:

gem 'rb-readline'

Если вы делаете группы сборщиков

group :development do
  gem 'rb-readline'
end

Тогда беги

> bundle

Сообщите мне, если это не сработает.

Брет Вайнрауб
источник
4

Чаще всего в Ruby-приложениях это вызвано гемами, у которых есть расширения (драгоценные камни, говорящие «Создание собственных расширений ...»), которые построены с использованием определенной версии, в данном случае readline.

В принципе, есть два решения:

Либо вы можете сделать символьную ссылку на версию 8 гема, на отсутствующую версию. Это будет работать во многих случаях, но если обратная совместимость нарушена, то не будет.

Или, если гем действительно поддерживает версию 8, вы можете переустановить этот конкретный гем или «сделать его безупречным», запустив gem pristine --all.

РЕДАКТИРОВАТЬ : В рамках вашего «того, что я пробовал», переустановка PostgreSQL также является одним из двоичных файлов, созданных с использованием определенной версии, которая также может потребовать перестройки для работы с системной библиотекой, такой как readline.

Фредерик Спанг
источник
Ack! Пристайн тоже не исправила. Насколько точно я должен переустановить PostgreSQL, не разрывая соединение с моей текущей БД? (конечно, ответ может быть «это не проблема», насколько я знаю).
Джонатан Тузман
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

Арис
источник
2

Итак, я проверил несколько ответов здесь, но я не думаю, что они могут работать с ванильной установкой Mojave Mac. Я использую 10.14.4, а вот это:

  • получить домашнее пиво с https://brew.sh

  • $ brew install coreutils: это устанавливает пакет gnu coreutils pkg для Mac, мы хотим получить greadlinkот него, потому что ссылка для чтения macOSX не совпадает с ссылкой для чтения gnu. Это крайне запутанно, но такова жизнь в Макленде.

  • $ echo 'alias readlink=greadlink' >> ~/.bash_aliasesЯ обнаружил, что macs readlink немного не хватает, поэтому я переопределил существующую readlink, применив псевдоним greadlink. (вы можете сделать его доступным для всех пользователей, $ 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.тогда моя ссылка для чтения не нарушит и не пропустит функции в библиотеке. Я почти уверен, что мы отформатируем наши Mac до выхода 9+.

Сальянгоз
источник
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`

См. Здесь подробный отчет о том, что происходит .

коденамев
источник
Это сработало только после того, как вручную символическая ссылка libreadline.8.dylibна libreadline.7.dylibкоторую отсутствовала. команда запуска:ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
Дэвид Шуман
0

Моя проблема была такой же при беге lftp.

Просто бег brew upgradeрешил мою проблему, так как он обновился (среди прочего):

readline 8.0.0_1 -> 8.0.1
lftp 4.8.4 -> 4.8.4_2
Бенхамин Валеро
источник
0

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

Если вы не можете найти readline, установленный на вашем Mac, вам следует запустить

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

Наслаждайтесь!

Эрик Ву
источник