Бібліотека не завантажена: /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

(моя версія readline 8)

і brew link readline --force

Але жодне з них цього не виправило.

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

(Оновлення) Я використовую коні рейки в якості консолі рейки, якщо це має значення.

Будь-яка допомога? Дякую.


1
спробуйтеbrew reinstall readline
MrYoshiji

не працювало, дякую
Джонатан Тузман

Працював для мене @MrYoshiji! Дякую!
Спонсори

Відповіді:


374

здається, що помилка видається під час пошуку /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 і працював.


Дякую Хоуз. Я просто спробував це, і це не вийшло. Я думаю, я і раніше це пробував. Я мушу сказати, що це символічне посилання, і lnце не речі, про які я насправді нічого не знаю: /
Джонатан Тузман,

5
Я працював для мене. Можливо, @JonathanTuzman ви не були в хорошому режисі? cd /usr/local/opt/readline/lib
Уліссе БН

7
Довелося brew link readline --forceстворити посилання в /usr/local/opt/readline/lib.
Кенленд

Я дав би вам +10, якби міг. Дякую!
eos87

Справжня відповідь - brew link readline --forceCandland, яка працювала на мене
Ракіб Фіга

42

Перевірка моєї версії Ruby, здається, виправила:

rvm reinstall 2.3.7

11
Це відповідь, якщо ви використовували rvm для установки ruby. Якщо ваша версія рубіну складена проти версії readline, яка більше не існує у вашій системі, вам слід перекомпілювати ruby ​​для посилання на нову версію. Я просто зіткнувся з цим питанням і спробував усе, крім символіки readline.8.dylib, щоб виступити за readline.7.dylib (що здається дійсно поганою ідеєю, навіть якщо це, здається, працювало для більшості всіх, підтримуючи цю відповідь .)
Кінгдон

4
Я використовую rbenv і rbenv install 2.5.1працював для мене в моєму контексті. Це пішло боком після того, як я побіг sudo xcode-select -s /Library/Developer/CommandLineToolsвирішити проблему, яку я відчував в іншому місці. fwiw
somedirection

1
Якщо ви використовуєте bundler, згодом ви зможете виявити, що вам потрібно bundle installперевстановити дорогоцінні камені з нативними розширеннями.
накип

27

ви можете спробувати

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

ви на правильному шляху, але, схоже, рейки шукають libreadline.7.dylib, а libreadline.7.dylib немає в папці.


1
Проблема знову з’являється, коли я запускаю «оновлення пивоваріння», але це рішення працює нормально і виправляю
Іван Б.

17

Так, найкраща відповідь - перевстановити.

Ви можете легко отримати версію, ввівши:

ruby -v

З rbenv, команда тобто:

rbenv install 2.3.7

з rvm:

rvm reinstall 2.3.7

Запуск rbenv install <ruby-version>зазнали невдачі з «граблями» від грабель конфліктів з встановленим виконуваним з Redis-стійка конфлікту. Мені довелося бігатиrbenv uninstall <ruby-version> && rbenv install <ruby-version>
Hirurg103

6

Дуже просте рішення, яке не передбачає перебудови бібліотеки RVM gemset АБО символів, що пов'язують символи.

Додайте до свого Gemfile:

gem 'rb-readline'

Якщо ви робите групи постачальників

group :development do
  gem 'rb-readline'
end

Потім бігайте

> bundle

Повідомте мене, якщо це не працює.


4

Найчастіше в Ruby-додатках це спричинено дорогоцінними каменями, які мають розширення (дорогоцінні камені, що говорять "Створення рідних розширень .."), створені за допомогою конкретної версії, у цьому випадку, readline .

В основному, є два рішення:

У будь-якому випадку ви можете позначити версію 8 дорогоцінного каміння до відсутньої версії. Це буде спрацьовувати у багатьох випадках, але якщо сумісність буде порушена, це не буде.

Або якщо дорогоцінний камінь насправді підтримує версію 8, ви можете встановити цей конкретний дорогоцінний камінь або "незайматися", запустивши його gem pristine --all.

EDIT : В рамках вашого "те, що я спробував", перевстановлення PostgreSQL також є одним із двійкових файлів, побудованих за допомогою конкретної версії, яка також може зажадати відновлення роботи для роботи з системною бібліотекою, такою як readline.


Ак! Приштина теж не виправила. Як саме я повинен перевстановити 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 Каталіна


2

Тож я перевірив тут кілька відповідей, але я не думаю, що вони можуть працювати з ванільним Mojave Mac встановити. Я використовував 10.14.4, поки я робив це:

  • отримати домашнє пиво з https://brew.sh

  • $ brew install coreutils: при цьому встановлюється gnu coreutils pkg для mac, ми хочемо greadlinkвід цього, оскільки readlink macOSX не є таким, як gnu readlink. Його надзвичайно заплутаною, але такою є життя в макленді.

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


0

Я б рекомендував проти вручну символічних зв'язків власних бібліотек. В якості ОС 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, але я думаю, що це поширена проблема, яка може виникнути у тому, що вам потрібно вручну зв’язати встановлене програмне забезпечення в потрібний шлях, який хоче інше програмне забезпечення.

Якщо ви не можете знайти лінійку читання, встановлену на вашому Mac, вам слід запустити

brew install readline

Після встановлення терміну, Brew попросить вас пов’язати його. Але насправді не можна зв’язатись, запустившись

brew link readline

Навіть не можна зв’язатись, бігаючи

sudo brew link readline

Mac OS попередить вас, що це надзвичайно небезпечно, і заважатиме вам робити.

Остання версія рядка для читання - версія 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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.