Biblioteka nie została załadowana: /usr/local/opt/readline/lib/libreadline.7.dylib


112

Kiedy próbuję uruchomić, rails consolepojawia się ten błąd:

/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)

Szybkie wyszukiwanie doprowadziło mnie do tego posta i wypróbowałem kilka rzeczy:

brew reinstall postgresql (to jest rzeczywiście DB dla tego projektu)

i

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

(moja wersja readline to 8)

i brew link readline --force

Ale żaden z nich tego nie naprawił.

Niedawno dodane pry-coolline, guardi guard-livereloadkamienie do mojego projektu, jeśli czyni żadnej różnicy (szyny konsoli ładowane grzywny przed tym). Korzystam z najnowszych macOS.

(Aktualizacja) Używam szyn podważanych jako konsoli szyn, jeśli to robi jakąkolwiek różnicę.

Jakaś pomoc? Dzięki.


1
spróbujbrew reinstall readline
MrYoshiji

nie zadziałało, dzięki
Jonathan Tuzman

Pracował dla mnie @MrYoshiji! Dzięki!
Sponsoruj

Odpowiedzi:


376

wydaje się, że błąd jest zgłaszany podczas wyszukiwania /usr/local/opt/readline/lib/libreadline.7.dylib.

Czy próbowałeś to dowiązać symbolicznie?

Więc coś takiego:

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

Właśnie wypróbowałem to na macOS Mojave, Ruby 2.5.3p105 i Rails 5.2.2 i działało.


Dzięki, Hawz. Po prostu spróbowałem i nie zadziałało. Myślę, że próbowałem tego również wcześniej. Muszę jednak powiedzieć, że to łącze symboliczne i lnnie są to rzeczy, o których właściwie nic nie wiem: /
Jonathan Tuzman

6
Pracowałem dla mnie. Może @JonathanTuzman nie byłeś w dobrym reż? cd /usr/local/opt/readline/lib
Ulysse BN

7
Musiałem brew link readline --forceutworzyć linki w /usr/local/opt/readline/lib.
Candland

Dałbym ci +10, gdybym mógł. Dzięki!
eos87

Prawdziwą odpowiedzią jest brew link readline --forceCandland, który pracował dla mnie
Rakib Fiha

42

Wydaje się, że ponowna instalacja mojej wersji Ruby rozwiązała problem:

rvm reinstall 2.3.7

11
To jest odpowiedź, jeśli użyłeś rvm do zainstalowania ruby. Jeśli twoja wersja ruby ​​została skompilowana z wersją readline, która już nie istnieje w twoim systemie, powinieneś przekompilować ruby, aby utworzyć link do nowej wersji. Właśnie natknąłem się na ten problem i wypróbowałem wszystko oprócz linkowania symbolicznego readline.8.dylib, aby zastąpić readline.7.dylib (co wydaje się naprawdę złym pomysłem, nawet jeśli wydaje się, że zadziałał dla większości wszystkich, głosując za tą odpowiedzią .)
Kingdon,

4
Używam rbenv i rbenv install 2.5.1działa dla mnie w moim kontekście. To poszło na bok po tym, jak pobiegłem, sudo xcode-select -s /Library/Developer/CommandLineToolsaby naprawić problem, którego doświadczyłem gdzie indziej. fwiw
somedirection

1
Jeśli korzystasz z pakietu, może się później okazać, że musisz bundle installponownie zainstalować klejnoty z natywnymi rozszerzeniami.
spume

27

możesz spróbować

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

jesteś na dobrej drodze, ale wygląda na to, że railsy szukają libreadline.7.dylib i libreadline.7.dylib nie ma w folderze.


1
Problem pojawia się ponownie, gdy uruchamiam „brew upgrade”, ale to rozwiązanie działa dobrze i naprawiam
Iwan B.


7

Bardzo proste rozwiązanie, które nie wymaga przebudowywania bibliotek RVM gemset OR z łączeniem symboli.

Dodaj do swojego Gemfile:

gem 'rb-readline'

Jeśli tworzysz grupy pakietów

group :development do
  gem 'rb-readline'
end

Następnie uruchomić

> bundle

Daj mi znać, jeśli to nie zadziała.


4

Najczęściej w Ruby aplikacji, jest to spowodowane przez kamienie szlachetne, które mają rozszerzenia (kamienie, mówiąc: „Budowanie rodzimych rozszerzeń ..”), które zostały zbudowane przy użyciu specyficznej wersji, w tym przypadku readline.

Zasadniczo istnieją dwa rozwiązania:

Możesz też połączyć symbolicznie wersję 8 klejnotu z brakującą wersją. To zadziała w wielu przypadkach, ale jeśli kompatybilność wsteczna zostanie zerwana, nie zadziała.

Lub, jeśli klejnot faktycznie obsługuje wersję 8, możesz ponownie zainstalować ten konkretny klejnot lub „naprawić” go, uruchamiając gem pristine --all.

EDYCJA : W ramach twojego "tego, co próbowałem", ponowna instalacja PostgreSQL jest również jednym z plików binarnych, zbudowanych przy użyciu określonej wersji, który może również wymagać przebudowy, aby działał z biblioteką systemową, taką jak readline.


Ack! Pristine też tego nie naprawił. Jak dokładnie powinienem ponownie zainstalować PostgreSQL bez przerywania połączenia z moją aktualną bazą danych? (oczywiście odpowiedź może brzmieć „to nie jest problem”, o ile wiem o czymkolwiek).
Jonathan Tuzman

4

Mam ten problem:

dyld: Library not loaded: /usr/local/opt/mpfr/lib/libmpfr.4.dylib

robić...

cd /usr/local/opt/mpfr/lib/
ln -s libmpfr.dylib libmpfr.4.dylib

załatwił mi sprawę dla macOS Catalina


2

Sprawdziłem więc tutaj kilka odpowiedzi, ale nie sądzę, że mogą działać z waniliową instalacją Mojave Mac. Używam wersji 10.14.4, podczas gdy robiłem te:

  • pobierz homebrew z https://brew.sh

  • $ brew install coreutils: to instaluje pakiet coreutils gnu dla mac, chcemy tego greadlinkz tego, ponieważ link readlink macOSX nie jest tym samym, co link readlink gnu. Jest to bardzo zagmatwane, ale takie jest życie w Maclandii.

  • $ echo 'alias readlink=greadlink' >> ~/.bash_aliasesZauważyłem, że trochę brakuje readlink w macs, więc nadpisałem istniejący readlink, aliasując greadlink. (możesz uczynić to użytecznym dla wszystkich użytkowników, dzięki $ alias readlink=greadlink >> /etc/bashrcczemu każdy użytkownik będzie mógł z niego korzystać.

  • $ ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib.8.Połączyłem już połączony plik zamiast „.8.0”. plik, ponieważ gdyby został zaktualizowany, .8.1.to mój link do odczytu nie zepsuje ani nie pominie funkcji w bibliotece. Jestem prawie pewien, że sformatujemy nasze komputery Mac, zanim wyjdzie 9+.


0

Odradzałbym ręczne dołączanie natywnych bibliotek symbolicznych. Podobnie jak w przypadku OS X 10.4, standardowa ścieżka biblioteki dołączania /usr/includenie jest już używana i jest blokowana przez SIP (co utrudnia przenoszenie rzeczy).

Apple dostarcza „starszego instalatora”, który umożliwia zainstalowanie nagłówków w „starej lokalizacji”, co również rozwiąże Twoją ścieżkę do prawidłowego znalezienia nagłówków zainstalowanych za pośrednictwem 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`

Zobacz tutaj, aby uzyskać szczegółowy opis tego, co się dzieje .


To działało tylko po ręcznym symlinking libreadline.8.dylibdo libreadline.7.dylibktórych brakowało. tj. uruchom polecenie:ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
David Schumann

0

Podczas biegania mój problem był taki sam lftp.

Samo bieganie brew upgraderozwiązało mój problem, ponieważ zaktualizowało się (między innymi):

readline 8.0.0_1 -> 8.0.1
lftp 4.8.4 -> 4.8.4_2

0

Tło: zdarzyło się to, gdy próbowałem zainstalować tig, ale myślę, że jest to częsty problem, który możesz mieć, że musisz ręcznie połączyć zainstalowane oprogramowanie z właściwą ścieżką, której żąda inne oprogramowanie.

Jeśli nie możesz znaleźć readline zainstalowanego na komputerze Mac, uruchom

brew install readline

Po zainstalowaniu terminu, brew poprosi Cię o połączenie go. Ale w rzeczywistości nie możesz połączyć, uruchamiając

brew link readline

Nawet nie możesz połączyć, uruchamiając

sudo brew link readline

Mac OS ostrzeże Cię, że jest to niezwykle niebezpieczne i powstrzyma Cię przed tym.

Najnowsza wersja readline to wersja 8, więc zobaczysz komunikat o błędzie, taki jak

Library not loaded: /usr/local/opt/readline/lib/libreadline.8.dylib

Napar zainstalowany termin o godz

/usr/local/Cellar/readline/8.0.4

Musisz więc ręcznie połączyć go z miejscem, które chce oprogramowanie, za pomocą polecenia ls

ln -s /usr/local/Cellar/readline/8.0.4 /usr/local/opt/readline

Cieszyć się!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.