Gần đây tôi đã "nâng cấp" từ OSX Mountain Lion lên Yosemite và từ R 3.1.3 lên 3.2. Ngay sau khi nâng cấp, khi tôi mở R hoặc RStudio, tôi nhận được thông báo bật lên nói rằng tôi cần cài đặt Java 6. Ngoài ra, việc tải rJava
hoặc bất kỳ gói nào phụ thuộc vào rJava (ví dụ xlsx
:) khiến RStudio bị lỗi (R cũng bị lỗi khi tôi thử điều này bằng cách mở R.app
trực tiếp).
Sau khi thử một số bản sửa lỗi được tìm thấy trên Stack Overflow và các nơi khác (thêm chi tiết bên dưới), tôi đã đến thời điểm tải rJava
hoặc bất kỳ gói nào phụ thuộc vào rJava
không còn khiến R gặp sự cố, nhưng dẫn đến lỗi sau:
library(rJava)
Error : .onLoad failed in loadNamespace() for 'rJava', details:
call: dyn.load(file, DLLpath = DLLpath, ...)
error: unable to load shared object '/Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so':
dlopen(/Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: @rpath/libjvm.dylib
Referenced from: /Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so
Reason: image not found
Error: package or namespace load failed for ‘rJava’
Tuy nhiên, nếu tôi gọi R từ dòng lệnh và sau đó tải rJava
hoặc bất kỳ gói nào phụ thuộc vào rJava
, nó dường như hoạt động (hoặc ít nhất tôi không nhận được bất kỳ thông báo lỗi nào).
Tôi đã thử một số bản sửa lỗi đã cố gắng khác nhau, một số trong số chúng một vài lần và hoàn toàn không thể nhớ chính xác những gì tôi đã làm theo thứ tự (không nhận ra đây sẽ là một trò lố và không thực sự theo dõi) , nhưng đây là ý chính của nó:
Đã thêm phần sau vào của tôi
.bash_profile
(theo câu trả lời SO này ):export JAVA_HOME = "/ usr / libexec / java_home -v 1.8"
export LD_LIBRARY_PATH = $ JAVA_HOME / jre / lib / serverĐã cấu hình lại java từ dòng lệnh như sau:
sudo R CMD javareconf -n
Đã kiểm tra
options("java.home")
và phát hiện ra điều này đã được đặt thànhNULL
. Tôi đã thử đặt nó thành như sau (theo câu hỏi SO này ):tùy chọn ("java.home" = "/ Library / Java / JavaVirtualMachines / jdk1.8.0_45.jdk / Contents / Home / jre")
Đã cài đặt Bộ phát triển Java mới nhất và được cài đặt lại
rJava
từ nguồn (không thể nhớ tôi đã tìm thấy bộ công cụ đó ở đâu).
Tại một số thời điểm trong khi thử tất cả những điều này, tôi có thể tải rJava
mà không gặp sự cố R, nhưng thay vào đó lại nhận được thông báo lỗi được đăng ở trên. Ngoài ra, khi tôi thoát RStudio, nó sẽ có vẻ đóng bình thường, nhưng sau đó một thông báo "RStudio thoát đột ngột" sẽ bật lên, cho biết rằng chương trình đã bị lỗi trong khi cố gắng đóng.
Cuối cùng tôi đã quyết định cài đặt Java cho OS X 2014-001 (Java 6), vì dường như tôi sắp hết các tùy chọn. Bây giờ, khi tôi mở R hoặc RStudio, thông báo bật lên "Phần mềm này cần Java 6" không còn xuất hiện nữa. Tuy nhiên, tôi vẫn nhận được thông .onLoad failed in loadNamespace() for 'rJava'
báo lỗi được đăng ở trên.
Khi xem lại một số bài đăng tôi đã xem, tôi nhận thấy một câu trả lời SO khác mà tôi đã bỏ qua trước đây, câu trả lời này khuyên bạn nên mở RStudio bằng mã dòng lệnh sau để cung cấp cho RStudio đường dẫn chính xác đến java:
LD_LIBRARY_PATH = $ (/ usr / libexec / java_home) / jre / lib / server: open -a RStudio
Điều đó đã mở ra một cửa sổ RStudio và tôi cũng có thể tải rJava
và các gói phụ thuộc vào nó mà không gặp lỗi.
Cuối cùng, tôi đã thử chạy R từ dòng lệnh (điều mà tôi chưa thực hiện trước đây). Nó chỉ ra rằng trên dòng lệnh, tải rJava
hoặc bất kỳ gói nào phụ thuộc vào rJava
hoạt động và không gây ra bất kỳ lỗi nào.
Vì vậy, bây giờ tôi có thể bắt rJava
đầu làm việc nếu tôi mở RStudio từ dòng lệnh với mã cung cấp cho RStudio đường dẫn java (như đã lưu ý ở trên). Tuy nhiên, tôi muốn tìm cách khắc phục sự cố cơ bản, bất kể nó có thể là gì, để RStudio có thể được mở theo cách Mac thông thường mà không cần dòng lệnh k bùn. Tôi cũng lo ngại rằng việc cài đặt một phiên bản Java cũ có thể gây ra sự cố.
Có ai có bất kỳ ý tưởng về cách chẩn đoán và giải quyết vấn đề này?
Yosemite
nên tôi không chắc lắm. Xem bên dưới để có câu trả lời liên quan đến El Capitan
.
El Capitan
giải pháp dưới đây hữu ích ngay khi RStudio
tải rJava
như mong đợi.
otool -L /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so
lấy danh sách các thư viện được chia sẻ và cách chúng được giải quyết. Tôi không chắc làm thế nào để khám phá nội dung thời gian chạy của @rpath
.
LD_LIBRARY_PATH=$(/usr/libexec/java_home)/jre/lib/server: open -a RStudio
thủ thuật, nhưng nó không hoạt động nữa. Tôi đã viết một bài đăng trên blog về vấn đề này và mô tả vấn đề này ở đó. Tôi tự hỏi liệu những người khác cũng gặp sự cố này trong cấu hình này hay đó là lỗi của tôi.