Lỗi tải rJava trong RStudio / R sau khi “nâng cấp” lên OSX Yosemite


122

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 rJavahoặ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.apptrự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 rJavahoặc bất kỳ gói nào phụ thuộc vào rJavakhô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 rJavahoặ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ành NULL. 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 rJavatừ 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 rJavamà 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 rJavavà 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 rJavahoặc bất kỳ gói nào phụ thuộc vào rJavahoạ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?


Giải pháp này vẫn hoạt động cho bạn ở El Capitan? Tôi đã làm việc này trước khi sử dụng LD_LIBRARY_PATH=$(/usr/libexec/java_home)/jre/lib/server: open -a RStudiothủ 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.
Paul Klemm

Tôi vẫn đang sử dụng Yosemitenê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.
eipi

Được rồi, tôi nghĩ lúc đó tôi sẽ đăng một câu hỏi mới. Có, El Capitangiải pháp dưới đây hữu ích ngay khi RStudiotải rJavanhư mong đợi.
Paul Klemm

2
Nó hoạt động sau khi tôi khởi động lại RStudio
Pranay Aryal

Khi chẩn đoán, hãy cố gắng 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.
Dave X

Câu trả lời:


279

Tôi đã gặp vấn đề tương tự và đã trải qua các bước tương tự như bạn. Bước cuối cùng để cho phép khởi động RStudio thông qua Finder / Spotlight là liên kết libjvm.dylib với / usr / local / lib:

sudo ln -f -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib

-f cờ được thêm vào để buộc ghi đè lên tệp / liên kết hiện có


4
Đã làm việc để khắc phục sự cố tương tự khi nâng cấp từ El Capitan lên Sierra hoàn tất. +1
Murta

2
Điều này đã giải quyết rất nhiều vấn đề; đặc biệt là nếu lỗi ban đầu xuất phát từ cannot jfindclass[[1]]đó có thể đến từ rJava và một trình điều khiển JDBC
Jenks

1
Tôi phải chạy lệnh này mỗi khi cập nhật Java trên Macbook Pro của mình. Nó vẫn hoạt động trên hệ điều hành MacOS Sierra 10.12.5 và Java Version 8 Cập nhật 141.
thiagoveloso

11
Điều này gần như đã làm việc cho tôi. Ngoài ra, tôi phải thêm một liên kết tượng trưng trong khung công tác R vào /usr/local/lib/libjvm.dylibtệp, vì / usr / local / lib / dường như không có trên @rpath. Ví dụ:ln -s /usr/local/lib/libjvm.dylib /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/
Dave X

1
Đây có thể là một trang hữu ích github.com/snowflakedb/dplyr-snowflakedb/wiki/…
user2079550,

53

Trên OSX El Capitan 10.11, người dùng không có quyền ghi vào / usr / lib. Vì vậy, thay vào đó, hãy sử dụng lệnh sau:

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib

29

Bạn có thể tải libjvm.dylib một cách rõ ràng, bằng cách chạy như

dyn.load('/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/server/libjvm.dylib')
library(rJava)

Có thể chắc chắn, nhưng không thuận tiện. Câu trả lời được chấp nhận có lẽ là một lựa chọn tốt hơn. +1để cung cấp một giải pháp thay thế.
thiagoveloso

27

Trên macOS High Sierra (10.13.1) và Java Phiên bản 9, bạn phải sử dụng đường dẫn JVM hơi khác (lưu ý jrethư mục bị thiếu trong đường dẫn so với hướng dẫn cho các phiên bản Java trước đó):

sudo ln -f -s $(/usr/libexec/java_home)/lib/server/libjvm.dylib /usr/local/lib

Bạn cũng phải thông báo cho R về JVM:

MY_R_VERSION=$(Rscript -e "cat(with(R.version, sprintf('%s.%s', major, substring(minor, 1, 1))))")
ln -s /usr/local/lib/libjvm.dylib /Library/Frameworks/R.framework/Versions/$MY_R_VERSION/Resources/lib/

Tuyệt vời. Điều đó đã hiệu quả! Có vẻ như các đề xuất cho El Capitan không hoạt động với Sierra
KarthikS

Cảm ơn rất nhiều, điều này cũng làm việc cho tôi. macOS High Sierra 10.13.2
pat_krat

Điều này đã giúp tôi. Tôi đã không làm phần R thông báo. Nó vẫn hoạt động. Cảm ơn rất nhiều :)
Harish

17

Lệnh sau hoạt động:

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib

Sau đó, trong RStudio, việc tải rJava hoạt động thông qua việc tải gói "xlsx".

library("xlsx")

Môi trường PS # 1: Mac OS X El Capitan 10.11.3+ với RStudio 0.99.491+ và R 3.2.3+. (Bây giờ tôi cũng đã thử nghiệm điều này trên macOS Sierra (10.12) và R.3.3.1.)

PS # 2 Tôi thấy rằng openxlsxnó nhanh hơn nhiều và không dựa vào Java để hoạt động, vì vậy tôi hiện đang sử dụng gói đó. Hy vọng rằng sẽ giúp những người khác.


1
cảm ơn bạn của tôi, bạn đã cứu ngày của tôi. Tôi đã thử với các giải pháp khác được tìm thấy xung quanh nhưng đây là giải pháp giải quyết được vấn đề của tôi.
Matteo De Felice

1
Một người dùng El Cap khác (nhưng sử dụng MacGUI) với một biểu quyết cảm ơn. Đã thử điều này từ lần đầu tiên vì nó có vẻ đơn giản nhất (và những nỗ lực trước đó với hướng dẫn cài đặt Java runtime 1.6 đã không giải quyết được vấn đề) và thành công ngay lập tức với pkg: rJava và phụ thuộc pkg; XLConnect. Có thể cần cài đặt Java 1.6 kế thừa có sẵn từ Oracle và được liên kết từ trang Apple.
IRTFM

1
Xin chào, lời khuyên của bạn cũng hoạt động với MacOS High Sierra, cảm ơn rất nhiều !!
user8193079

1
openxlsxFTW!
iled

Đúng! @iled: Tôi đồng ý, tốt hơn là sử dụng openxlsxanyway.
Sander W. van der Laan,

7

Bạn sẽ có thể sử dụng CRAN rJava mà không cần phải biên dịch lại rJava hoặc thực hiện bất kỳ bước bổ sung nào bằng cách liên kết thư viện được chia sẻ với thư mục thư viện R framework.

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /Library/Frameworks/R.framework/Libraries

6

Đây là cách tôi định cấu hình nó hoạt động bình thường trên hai máy Mac chạy Mac OS X El Capitan (10.11.6):

  1. Gỡ cài đặt 'rJava' bằng cách đưa ra các lệnh sau trong cửa sổ dòng lệnh:

    Rscript -e 'remove.packages("rJava")'
    sudo Rscript -e 'remove.packages("rJava")'
  2. Tải xuống và cài đặt phần mềm Java từ Oracle: https://www.java.com/en/download/mac_download.jsp

  3. Thêm các dòng sau để /Users/<userid>/.bashrcsử dụng trình chỉnh sửa yêu thích của bạn:

    # Set JAVA_HOME so rJava package can find it
    export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)/jre
  4. Đóng và khởi động lại bất kỳ cửa sổ terminal, R và RStudio nào (để nhận các thay đổi đối với .bashrc).

  5. Chạy lệnh sau trong cửa sổ Terminal:

    sudo ln -sf $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
  6. Chạy lệnh sau trong cửa sổ Terminal:

    sudo Rscript -e 'install.packages("rJava", repos="http://rforge.net", type="source")'

Tôi đang gặp lỗi thư viện / trình liên kết licuuc khi làm theo điều này, bạn có thể giải thích không? Đang cố gắng cài đặt trên macOS Sierra, thêm tại đây (Trước đó ở El Capitan).
hhh

5

Đây là các bước đơn giản cho nó:

  1. loại bỏ gói rJava: remove.packages (rJava)
  2. gần hơn
  3. cài đặt Java mới nhất trên mac của bạn
  4. mở terminal và gõ lệnh này: sudo R CMD javareconf
  5. Mở R và cài đặt rJava bằng lệnh này:

    install.packages ("rJava", dependencies = TRUE, type = "source")


Tôi thực sự đã làm điều này trước khi tôi kết thúc ở đây. Nó làm cho thư viện phụ thuộc rjava của tôi cài đặt nhưng không bắt đầu. Liên kết của libjvm.dylibthành /usr/local/libđã làm cho nó cũng bắt đầu :)
jonalv

3

Sự cố không tìm thấy hình ảnh tồn tại với bản cài đặt hoàn toàn mới trên OSX High Sierra với Java SE 10 JDK mới nhất.

Tôi đã có thể giải quyết sự cố đường dẫn với rJava bằng cách sử dụng bản sửa lỗi được tìm thấy trên trang sự cố rJava Github: https://github.com/su/rJava/issues/78

R CMD javareconf JAVA_CPPFLAGS = -I / Hệ thống / Thư viện / Khung / JavaVM.framework / Tiêu đề


1

Đây là những gì đã làm việc cho tôi trên MAC:

  1. trong của bạn ~/.profilehoặc ~/.bashrcthêm dòng này: %export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home

    1.1 % source .profile(hoặc % source .bashrc)

  2. % sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
  3. remove.packages(rJava)
  4. remove.packages(Rweka)
  5. Từ thiết bị đầu cuối, nhập lệnh này: %sudo R CMD javareconf
  6. install.packages("rJava", dependencies = TRUE, type = "source")
  7. install.packages("rJava", dependencies = TRUE, type = "source")
  8. Tải của bạn library("rJava", "RWeka")

May mắn nhất.


1

Có thể một câu trả lời đơn giản khác không liên quan đến hệ thống tệp của bạn:

$ install_name_tool -add_rpath /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/server /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so

(Thay thế jdk1.8.0_131.jdkbằng đường dẫn JDK của bạn.)


2
Tôi có homebrew R, và lệnh chính xác mà làm việc đối với tôi là: install_name_tool -add_rpath /Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/server /usr/local/lib/R/3.3/site-library/rJava/libs/rJava.so. Tôi có thể thấy rằng đường đi bị thiếu vớiotool -l /usr/local/lib/R/3.3/site-library/rJava/libs/rJava.so | grep LC_RPATH
Ian

@Có lẽ bạn biết giải pháp cho vấn đề này ở đây , nơi tôi đã cài đặt Java với Homebrew và hiện đang cố gắng để rJava hoạt động. Ý tưởng?
hhh

1

Kiểm tra vị trí của tệp libjvm.dylib.

Hãy thử điều này, trong trường hợp của tôi, điều này đã hoạt động:

dyn.load('/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/lib/server/libjvm.dylib')
library(rJava)

1

Tôi đã xem qua tất cả các cách khắc phục sự cố mà tôi có thể tìm thấy, sau đó cài đặt jdk-11.0.1_osx-x64_bin.dmg từ: Oracle tải xuống

Mọi thứ hoạt động hoàn hảo sau đó.

Kiểm tra phiên bản của thư viện không được tải khi bạn chạy thư viện ('rJava') và khớp với phiên bản java bạn cần cài đặt.


1

Tôi nhận thấy rằng 'rJava' khá nghiêm ngặt về phiên bản JDK khi tải trong Rstudio.
Trong trường hợp của tôi (Mac OS. 10.14.6 - Mojave), tôi đã cài đặt jdk-13 đã được thử nghiệm với jdk-11.
Tôi đã liên kết phiên bản JDK của mình với một thư mục không tồn tại được Rstudio (JDK 11) cho là hợp lệ:

sudo ln -sf /Library/Java/JavaVirtualMachines/jdk-13.jdk/ /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk

và đáng ngạc nhiên là nó hoạt động như một sự quyến rũ ...
BTW., không có vấn đề gì khi chạy 'rJava' theo các hướng dẫn trước đó trong R nguyên bản.



0

Dòng này bên dưới đã giải quyết cùng một vấn đề mà tôi gặp phải với rJavagói như một số người khác trong cuộc thảo luận này đã làm. Tôi chắc rằng có nhiều hơn một giải pháp cho vấn đề này và tôi chân thành cảm ơn tất cả những đóng góp của họ bởi vì đôi khi một dòng như hình dưới đây tiết kiệm rất nhiều thời gian từ việc bỏ vào thùng rác!

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib

0

Chạy như sau trên dòng lệnh: sudo R CMD javareconf

Một số giải pháp ở trên đã đề cập đến vấn đề này, nhưng chúng cũng đề xuất rằng một giải pháp gỡ bỏ và sau đó cài đặt lại rJavagói. Tôi thấy những bước bổ sung đó là không cần thiết.


Tôi cố gắng giải pháp của bạn sudo R CMD javareconfnhưng library(rJava)vẫn mang lại cho các lỗi tương tự: Error: package or namespace load failed for ‘rJava’: .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.5/Resources/library/rJava/libs/rJava.so': ... Reason: image not found
Lazarus Thurston

0

Bạn có thể thay đổi tham chiếu trong R bằng cách sử dụng lệnh sau:

sudo install_name_tool -change /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home/lib/server/libjvm.dylib /Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home/lib/server/libjvm.dylib /Library/Frameworks/R.framework/Versions/3.6/Resources/library/rJava/libs/rJava.so
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.