Thư viện không được tải: /usr/local/opt/readline/lib/libreadline.7.dylib


112

Khi tôi thử chạy, rails consoletôi gặp lỗi này:

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

Một tìm kiếm nhanh đã đưa tôi đến bài đăng này và tôi đã thử một số cách:

brew reinstall postgresql (đây thực sự là DB cho dự án này)

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

(phiên bản readline của tôi là 8)

brew link readline --force

Nhưng không ai trong số này đã sửa nó.

Gần đây tôi đã thêm vào pry-coolline, guardguard-livereloadđá quý để dự án của tôi nếu mà làm cho bất kỳ sự khác biệt (đường ray giao diện điều khiển nạp tốt trước những). Tôi đang chạy trên macos mới nhất.

(Cập nhật) Tôi đang sử dụng pry rails làm bảng điều khiển rails của mình, nếu điều đó tạo ra bất kỳ sự khác biệt nào.

Bất kỳ giúp đỡ? Cảm ơn.


1
cố gắng lênbrew reinstall readline
MrYoshiji

không hiệu quả, nhờ
Jonathan Tuzman

Đã làm việc cho tôi @MrYoshiji! Cảm ơn!
Spons

Câu trả lời:


374

lỗi dường như được ném ra khi tìm kiếm /usr/local/opt/readline/lib/libreadline.7.dylib.

Bạn đã thử liên kết biểu tượng đó chưa?

Vì vậy, một cái gì đó như:

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

Chỉ cần thử điều đó trên macOS Mojave, ruby ​​2.5.3p105 và Rails 5.2.2 và hoạt động.


Cảm ơn Hawz. Tôi chỉ thử nó và nó không hoạt động. Tôi nghĩ rằng tôi đã thử điều này trước đây. Tôi phải nói rằng mặc dù liên kết tượng trưng đó và lnkhông phải là điều tôi thực sự biết gì về: /
Jonathan Tuzman

5
Tôi đã làm việc cho tôi. Có lẽ @JonathanTuzman bạn không phải là người giỏi? cd /usr/local/opt/readline/lib
Ulysse BN

7
Phải brew link readline --forcetạo các liên kết trong /usr/local/opt/readline/lib.
Candland

Tôi sẽ cho bạn +10 nếu tôi có thể. Cảm ơn!
eos87

Câu trả lời thực sự là brew link readline --forcecủa Candland, mà làm việc cho tôi
Rakib Fiha

42

Cài đặt lại phiên bản Ruby của tôi dường như đã khắc phục được sự cố:

rvm reinstall 2.3.7

11
Đây là câu trả lời, nếu bạn đã sử dụng rvm để cài đặt ruby. Nếu phiên bản ruby ​​của bạn được biên dịch dựa trên phiên bản dòng đọc không còn tồn tại trên hệ thống của bạn, thì bạn nên biên dịch lại ruby ​​để liên kết với phiên bản mới. Tôi vừa gặp phải vấn đề này và đã thử mọi cách trừ việc mã hóa readline.8.dylib để thay thế cho readline.7.dylib (có vẻ như là một ý tưởng thực sự tồi, ngay cả khi nó có vẻ hiệu quả với hầu hết mọi người, ủng hộ câu trả lời đó .)
Kingdon

4
Tôi sử dụng rbenv và một rbenv install 2.5.1làm việc cho tôi trong ngữ cảnh của tôi. Điều này đã đi ngang sau khi tôi chạy sudo xcode-select -s /Library/Developer/CommandLineToolsđể khắc phục sự cố mà tôi đang gặp phải ở nơi khác. fwiw
somedirection

1
Nếu bạn đang sử dụng gói, sau đó, bạn có thể thấy rằng bạn cần phải bundle installcài đặt lại các gem với các tiện ích mở rộng gốc.
spume

27

bạn có thể thử

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

bạn đang đi đúng hướng nhưng có vẻ như rails đang tìm kiếm libreadline.7.dylib và libreadline.7.dylib không có trong thư mục.


1
Vấn đề lại xuất hiện khi tôi chạy 'nâng cấp brew' nhưng thi tốt công việc giải pháp và sửa chữa nó
Iwan B.

17

Có, câu trả lời tốt nhất là cài đặt lại.

Bạn có thể dễ dàng nhận được phiên bản bằng cách nhập:

ruby -v

Với rbenv, lệnh là:

rbenv install 2.3.7

với rvm:

rvm reinstall 2.3.7

Chạy rbenv install <ruby-version>không thành công với "rake" từ xung đột rake với tệp thực thi được cài đặt từ xung đột redis-rack . Tôi phải chạyrbenv uninstall <ruby-version> && rbenv install <ruby-version>
Hirurg103

6

Một giải pháp rất đơn giản không liên quan đến việc xây dựng lại các thư viện gemset HOẶC sym-link RVM của bạn.

Thêm vào Gemfile của bạn:

gem 'rb-readline'

Nếu bạn đang thực hiện các nhóm trình gói

group :development do
  gem 'rb-readline'
end

Sau đó chạy

> bundle

Hãy cho tôi biết nếu điều đó không hiệu quả.


4

Thông thường nhất trong các ứng dụng Ruby, điều này là do các viên đá quý có phần mở rộng (các viên đá quý nói "Xây dựng phần mở rộng gốc .."), được tạo bằng cách sử dụng một phiên bản cụ thể, trong trường hợp này readline,.

Về cơ bản, có hai giải pháp:

Bạn có thể liên kết biểu tượng phiên bản 8 của đá quý với phiên bản bị thiếu. Điều này sẽ hoạt động trong nhiều trường hợp, nhưng nếu khả năng tương thích ngược bị phá vỡ, nó sẽ không.

Hoặc, nếu đá quý thực sự hỗ trợ phiên bản 8, bạn có thể cài đặt lại đá quý cụ thể đó hoặc "nguyên sơ" bằng cách chạy gem pristine --all.

CHỈNH SỬA : Trong phạm vi "những gì tôi đã thử", cài đặt lại PostgreSQL, cũng là một trong các tệp nhị phân, được xây dựng bằng một phiên bản cụ thể, cũng có thể yêu cầu xây dựng lại, để hoạt động với thư viện hệ thống, chẳng hạn như readline.


Ách! Pristine cũng không sửa nó. Tôi nên cài đặt lại PostgreSQL một cách chính xác như thế nào mà không phá vỡ bất kỳ kết nối nào với DB hiện tại của tôi? (tất nhiên câu trả lời có thể là "đó không phải là một mối quan tâm", theo như tôi biết về bất cứ điều gì).
Jonathan Tuzman

4

Gặp sự cố này:

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

đang làm...

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

đã thực hiện thủ thuật cho tôi đối với macOS Catalina


2

Vì vậy, tôi đã kiểm tra một số câu trả lời ở đây nhưng tôi không nghĩ rằng chúng có thể hoạt động với cài đặt mac vani Mojave. Tôi đang sử dụng 10.14.4 trong khi tôi đã làm những điều này:

  • tải homebrew từ https://brew.sh

  • $ brew install coreutils: cái này cài đặt gnu coreutils pkg cho mac, chúng tôi muốn cái greadlinknày từ cái này vì liên kết đọc của macOSX không giống với liên kết đọc gnu. Nó cực kỳ khó hiểu nhưng đó là cuộc sống ở Macland.

  • $ echo 'alias readlink=greadlink' >> ~/.bash_aliasesTôi thấy liên kết đọc của macs hơi thiếu nên tôi đã ghi đè lên liên kết đọc hiện có bằng cách ghép răng cưa greadlink. (bạn có thể làm cho điều này có thể sử dụng được bởi tất cả người dùng $ alias readlink=greadlink >> /etc/bashrc, điều này sẽ cho phép mọi người dùng có thể sử dụng nó.

  • $ ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylibTôi đã liên kết .8.tệp đã được liên kết thay vì '.8.0.' vì nếu nó được cập nhật .8.1.thì liên kết đọc của tôi sẽ không bị hỏng hoặc bỏ lỡ các tính năng trên thư viện. Tôi khá chắc chắn rằng chúng tôi sẽ định dạng tài liệu của mình trước khi 9+ ra mắt.


0

Tôi khuyên bạn không nên tạo các thư viện gốc liên kết biểu tượng theo cách thủ công. Đối với OS X 10.4, tiêu chuẩn bao gồm đường dẫn thư viện/usr/include không còn được sử dụng và bị khóa bởi SIP (khiến việc di chuyển mọi thứ trở nên khó khăn).

Apple cung cấp một “trình cài đặt kế thừa” để bạn có thể cài đặt các tiêu đề ở “vị trí cũ”, điều này cũng sẽ giải quyết đường dẫn của bạn để tìm chính xác các tiêu đề được cài đặt qua 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`

Xem ở đây để biết chi tiết về những gì đang xảy ra .


Điều này chỉ làm việc sau khi tay symlinking libreadline.8.dylibđể libreadline.7.dylibmà đã mất tích. tức là chạy lệnh:ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
David Schumann

0

Vấn đề của tôi cũng giống như vậy khi chạy lftp.

Chỉ cần chạy brew upgradeđã giải quyết được vấn đề của tôi, vì nó đã cập nhật (trong số những người khác):

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

0

Thông tin cơ bản: Điều này đã xảy ra khi tôi cố gắng cài đặt tig, nhưng tôi nghĩ đây là một vấn đề phổ biến mà bạn có thể gặp phải vì bạn cần liên kết thủ công phần mềm đã cài đặt vào đúng đường dẫn mà phần mềm khác muốn.

Nếu bạn không thể tìm thấy dòng đọc được cài đặt trên máy Mac của mình, bạn nên chạy

brew install readline

Sau khi bạn cài đặt thời hạn, brew sẽ yêu cầu bạn liên kết nó. Nhưng thực sự bạn không thể liên kết bằng cách chạy

brew link readline

Ngay cả khi bạn không thể liên kết bằng cách chạy

sudo brew link readline

Mac OS sẽ cảnh báo bạn điều này cực kỳ nguy hiểm và ngăn bạn thực hiện.

Phiên bản mới nhất của readline là phiên bản 8, vì vậy bạn sẽ thấy thông báo lỗi như

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

Hạn chót cài đặt bia lúc

/usr/local/Cellar/readline/8.0.4

Vì vậy, bạn phải liên kết thủ công nó với nơi mà phần mềm của bạn muốn bằng cách sử dụng lệnh ls

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

Thưởng thức!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.