Library tidak dimuat: /usr/local/opt/readline/lib/libreadline.7.dylib

112

Ketika saya mencoba menjalankan rails consolesaya mendapatkan kesalahan ini:

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

Pencarian cepat membawa saya ke posting ini dan saya telah mencoba beberapa hal:

brew reinstall postgresql (ini memang DB untuk proyek ini)

dan

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

(readline versi saya adalah 8)

dan brew link readline --force

Tapi tidak satupun dari ini yang memperbaikinya.

Saya baru-baru ini menambahkan pry-coolline, guarddan guard-livereloadpermata ke proyek saya jika itu membuat perbedaan (konsol rel dimuat dengan baik sebelum itu). Saya menjalankan macOS terbaru.

(Pembaruan) Saya menggunakan rel pengungkit sebagai konsol rel saya, jika itu membuat perbedaan.

Ada bantuan? Terima kasih.

Jonathan Tuzman
sumber
1
cobabrew reinstall readline
MrYoshiji
tidak berhasil, terima kasih
Jonathan Tuzman
Bekerja untuk saya @MrYoshiji! Terima kasih!
Spons

Jawaban:

374

kesalahan tersebut tampaknya terlempar saat mencari /usr/local/opt/readline/lib/libreadline.7.dylib.

Sudahkah Anda mencoba menghubungkannya?

Jadi sesuatu seperti:

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

Baru saja mencobanya di macOS Mojave, ruby ​​2.5.3p105 dan Rails 5.2.2 dan berfungsi.

Hawz
sumber
Terima kasih Hawz. Saya baru saja mencobanya dan tidak berhasil. Saya pikir saya telah mencoba ini sebelumnya juga. Saya harus mengatakan meskipun symlink itu dan lnbukan hal-hal yang sebenarnya saya ketahui: /
Jonathan Tuzman
5
Saya bekerja untuk saya. Mungkin @JonathanTuzman Anda tidak dalam posisi yang baik? cd /usr/local/opt/readline/lib
Ulysse BN
7
Harus brew link readline --forcemembuat tautan di /usr/local/opt/readline/lib.
Candland
Saya akan memberi Anda +10 jika saya bisa. Terima kasih!
eos87
Jawaban sebenarnya adalah brew link readline --forcedari Candland, yang berhasil untuk saya
Rakib Fiha
42

Menginstal ulang versi Ruby saya sepertinya telah memperbaikinya:

rvm reinstall 2.3.7
Jonathan Tuzman
sumber
11
Inilah jawabannya, jika Anda menggunakan rvm untuk menginstal ruby. Jika versi ruby ​​Anda dikompilasi dengan versi readline yang tidak lagi ada di sistem Anda, maka Anda harus mengkompilasi ulang ruby ​​untuk ditautkan ke versi baru. Saya baru saja mengalami masalah ini sendiri, dan mencoba segalanya kecuali menghubungkan readline.8.dylib untuk menggantikan readline.7.dylib (yang sepertinya ide yang sangat buruk, bahkan jika tampaknya berhasil untuk kebanyakan orang, meningkatkan jawaban itu .)
Kingdon
4
Saya menggunakan rbenv dan rbenv install 2.5.1bekerja untuk saya dalam konteks saya. Ini berjalan menyamping setelah saya menjalankan sudo xcode-select -s /Library/Developer/CommandLineToolsuntuk memperbaiki masalah yang saya alami di tempat lain. fwiw
somedirection
1
Jika Anda menggunakan bundler, Anda mungkin kemudian menemukan bahwa Anda perlu bundle installmenginstal ulang permata dengan ekstensi asli.
membasahi
27

bisakah kamu mencoba

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

Anda berada di jalur yang benar tetapi sepertinya rails mencari libreadline.7.dylib dan libreadline.7.dylib tidak ada di folder.

ericshao
sumber
1
Masalahnya muncul kembali ketika saya menjalankan 'peningkatan minuman' tetapi solusi ini berfungsi dengan baik dan memperbaikinya
Iwan
17

Ya, jawaban terbaik adalah menginstal ulang.

Anda bisa mendapatkan versinya dengan mudah dengan mengetik:

ruby -v

Dengan rbenv, perintahnya adalah:

rbenv install 2.3.7

dengan rvm:

rvm reinstall 2.3.7
FreePender
sumber
Menjalankan rbenv install <ruby-version>gagal dengan "rake" dari konflik rake dengan executable yang diinstal dari konflik redis-rack . Saya harus larirbenv uninstall <ruby-version> && rbenv install <ruby-version>
Hirurg103
7

Solusi yang sangat sederhana yang tidak melibatkan pembangunan kembali gemset RVM ATAU pustaka sym-linking.

Tambahkan ke Gemfile Anda:

gem 'rb-readline'

Jika Anda melakukan grup bundler

group :development do
  gem 'rb-readline'
end

Lalu lari

> bundle

Beri tahu saya jika tidak berhasil.

Bret Weinraub
sumber
4

Paling sering dalam aplikasi Ruby, hal ini disebabkan oleh permata yang memiliki ekstensi (permata mengatakan "Membangun ekstensi asli .."), yang dibuat menggunakan versi tertentu, dalam hal ini readline,.

Pada dasarnya, ada dua solusi:

Baik, Anda dapat menghubungkan permata versi 8 ke versi yang hilang. Ini akan berfungsi dalam banyak kasus, tetapi jika kompatibilitas mundur rusak, itu tidak akan berhasil.

Atau, jika permata tersebut benar-benar mendukung versi 8, Anda dapat menginstal ulang permata tertentu itu, atau "asli" dengan menjalankannya gem pristine --all.

EDIT : Dalam lingkup "apa yang telah saya coba", menginstal ulang PostgreSQL, juga merupakan salah satu binari, dibangun menggunakan versi tertentu, yang mungkin juga memerlukan pembangunan kembali, untuk bekerja dengan pustaka sistem, seperti readline.

Frederik Spang
sumber
Ack! Pristine juga tidak memperbaikinya. Seberapa tepatnya saya harus menginstal ulang PostgreSQL tanpa memutuskan koneksi apa pun ke DB saya saat ini? (tentu saja jawabannya bisa jadi "itu bukan masalah", sejauh yang saya tahu tentang apa pun).
Jonathan Tuzman
4

Punya masalah ini:

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

perbuatan...

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

melakukan trik untuk saya untuk macOS Catalina

Aris
sumber
2

Jadi saya telah memeriksa beberapa jawaban di sini tetapi saya rasa mereka tidak dapat bekerja dengan penginstalan mac vanilla Mojave. Saya menggunakan 10.14.4 saat melakukan ini:

  • dapatkan homebrew dari https://brew.sh

  • $ brew install coreutils: ini menginstal pkg gnu coreutils untuk mac, kami menginginkan greadlinkdari ini karena tautan baca macOSX tidak sama dengan tautan baca gnu. Ini sangat membingungkan tetapi seperti itulah kehidupan di macland.

  • $ echo 'alias readlink=greadlink' >> ~/.bash_aliasesSaya menemukan macs readlink menjadi sedikit kurang jadi saya mengganti readlink yang ada dengan aliasing greadlink. (Anda dapat membuat ini dapat digunakan oleh semua pengguna $ alias readlink=greadlink >> /etc/bashrcyang akan memungkinkan setiap pengguna untuk dapat menggunakannya.

  • $ ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylibSaya menautkan file yang sudah ditautkan .8.alih-alih '.8.0.' file karena jika diperbarui ke .8.1.maka tautan baca saya tidak akan merusak atau melewatkan fitur di perpustakaan. Saya cukup yakin kami akan memformat mac kami sebelum 9+ keluar.

Salyangoz
sumber
0

Saya akan merekomendasikan untuk tidak melakukan symlink pada perpustakaan asli secara manual. Seperti OS X 10.4, jalur perpustakaan include standar /usr/includetidak lagi digunakan dan dikunci oleh SIP (membuatnya sulit untuk dipindahkan).

Apple mengirimkan "penginstal lama" agar Anda dapat menginstal header di "lokasi lama", yang juga akan menyelesaikan jalur Anda untuk menemukan header yang diinstal dengan benar 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`

Lihat di sini untuk artikel rinci tentang apa yang sedang terjadi .

codenamev
sumber
Ini hanya berfungsi setelah menyambungkan secara manual libreadline.8.dylibke libreadline.7.dylibyang hilang. yaitu menjalankan perintah:ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
David Schumann
0

Masalah saya sama saja saat berlari lftp.

Hanya menjalankan brew upgradetelah menyelesaikan masalah saya, karena telah diperbarui (antara lain):

readline 8.0.0_1 -> 8.0.1
lftp 4.8.4 -> 4.8.4_2
Benjamín Valero
sumber
0

Latar Belakang: Ini terjadi ketika saya mencoba menginstal tig, tetapi saya pikir ini adalah masalah umum yang mungkin Anda alami sehingga Anda perlu menautkan perangkat lunak yang diinstal secara manual ke jalur yang benar yang diinginkan perangkat lunak lain.

Jika Anda tidak dapat menemukan readline yang diinstal pada Mac Anda, Anda harus menjalankannya

brew install readline

Setelah Anda memasang tenggat waktu, brew akan meminta Anda untuk menautkannya. Tetapi sebenarnya Anda tidak dapat menghubungkan dengan menjalankan

brew link readline

Bahkan Anda tidak dapat menghubungkan dengan menjalankan

sudo brew link readline

Mac OS akan memperingatkan Anda bahwa ini sangat berbahaya dan menghentikan Anda melakukannya.

Versi readline terbaru adalah versi 8, jadi Anda akan melihat pesan kesalahan seperti

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

Batas waktu pembuatan bir dipasang pada

/usr/local/Cellar/readline/8.0.4

Jadi Anda harus menautkannya secara manual ke tempat yang diinginkan perangkat lunak Anda dengan menggunakan perintah ls

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

Nikmati!

Eric Wu
sumber