ข้อผิดพลาดในการโหลด rJava ใน RStudio / R หลังจาก "อัปเกรด" เป็น OSX Yosemite


122

ฉันเพิ่ง "อัปเกรด" จาก OSX Mountain Lion เป็น Yosemite และจาก R 3.1.3 เป็น 3.2 ทันทีหลังจากการอัพเกรดเมื่อฉันเปิด R หรือ RStudio ฉันได้รับข้อความป๊อปอัปแจ้งว่าฉันต้องติดตั้ง Java 6 นอกจากนี้การโหลดrJavaหรือแพ็คเกจใด ๆ ที่ขึ้นอยู่กับ rJava (เช่นxlsx) ทำให้ RStudio ขัดข้อง (R ก็พัง เมื่อฉันลองสิ่งนี้โดยเปิดR.appโดยตรง)

หลังจากลองแก้ไขสองสามอย่างที่พบใน Stack Overflow และที่อื่น ๆ (รายละเอียดเพิ่มเติมด้านล่าง) ฉันอยู่ในจุดที่การโหลดrJavaหรือแพ็คเกจใด ๆ ที่ขึ้นอยู่กับว่าrJavaไม่ทำให้ R ขัดข้องอีกต่อไป แต่ส่งผลให้เกิดข้อผิดพลาดต่อไปนี้:

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

อย่างไรก็ตามหากฉันเรียกใช้ R จากบรรทัดคำสั่งแล้วโหลดrJavaหรือแพ็คเกจใด ๆ ที่ขึ้นอยู่rJavaดูเหมือนว่าจะใช้งานได้ (หรืออย่างน้อยฉันก็ไม่ได้รับข้อความแสดงข้อผิดพลาดใด ๆ )

ฉันได้ลองพยายามแก้ไขหลายครั้งบางครั้งก็ไม่กี่ครั้งและจำไม่ได้ว่าฉันทำอะไรตามลำดับ (ไม่รู้ว่านี่จะเป็นเรื่องที่น่ารังเกียจและไม่ได้ติดตามจริงๆ) แต่นี่คือส่วนสำคัญของมัน:

  • เพิ่มสิ่งต่อไปนี้ในของฉัน.bash_profile(ตามคำตอบ SO นี้ ):

    ส่งออก JAVA_HOME = "/ usr / libexec / java_home -v 1.8"
    ส่งออก LD_LIBRARY_PATH = $ JAVA_HOME / jre / lib / เซิร์ฟเวอร์

  • กำหนดค่า java ใหม่จากบรรทัดคำสั่งดังนี้:

    sudo R CMD javareconf -n

  • การตรวจสอบและค้นพบนี้ได้รับการตั้งค่าให้options("java.home") NULLฉันลองตั้งค่าเป็นดังต่อไปนี้ (ต่อคำถาม SO นี้ ):

    ตัวเลือก ( "java.home" = "/ Library / Java / JavaVirtualMachines / jdk1.8.0_45.jdk / สารบัญ / Home / JRE")

  • ติดตั้ง Java Development Kit ล่าสุดและติดตั้งใหม่rJavaจากซอร์ส (จำไม่ได้ว่าเจออันไหน)

ในบางจุดในขณะที่ลองสิ่งเหล่านี้ทั้งหมดฉันสามารถโหลดได้rJavaโดยไม่หยุดทำงาน R แต่ได้รับข้อความแสดงข้อผิดพลาดที่โพสต์ไว้ด้านบน นอกจากนี้เมื่อฉันออกจาก RStudio ดูเหมือนว่าจะปิดตามปกติ แต่จากนั้นข้อความ "RStudio ออกโดยไม่คาดคิด" จะปรากฏขึ้นแสดงว่าโปรแกรมขัดข้องขณะพยายามปิด

ในที่สุดฉันก็ตัดสินใจติดตั้งJava สำหรับ OS X 2014-001 (Java 6) เนื่องจากดูเหมือนว่าตัวเลือกจะหมด ตอนนี้เมื่อฉันเปิด R หรือ RStudio ข้อความป๊อปอัป "ซอฟต์แวร์นี้จำเป็นต้องใช้ Java 6" จะไม่ปรากฏขึ้นอีกต่อไป อย่างไรก็ตามฉันยังคงได้รับ.onLoad failed in loadNamespace() for 'rJava'ข้อความแสดงข้อผิดพลาดที่โพสต์ไว้ด้านบน

ในการตรวจสอบโพสต์บางส่วนที่ฉันได้ดูไปแล้วฉันสังเกตเห็นคำตอบ SO อื่นที่ฉันพลาดมาก่อนซึ่งแนะนำให้เปิด RStudio ด้วยรหัสบรรทัดคำสั่งต่อไปนี้ซึ่งทำให้ RStudio เป็นเส้นทางที่ถูกต้องไปยัง java:

LD_LIBRARY_PATH = $ (/ usr / libexec / java_home) / jre / lib / เซิร์ฟเวอร์: เปิด -a RStudio

นั่นเป็นการเปิดหน้าต่าง RStudio และฉันก็สามารถโหลดrJavaและแพ็คเกจที่ขึ้นอยู่กับมันได้โดยไม่ได้รับข้อผิดพลาด

สุดท้ายฉันลองเรียกใช้ R จากบรรทัดคำสั่ง (ซึ่งฉันไม่เคยทำมาก่อน) ปรากฎว่าในบรรทัดคำสั่งการโหลดrJavaหรือแพ็คเกจใด ๆ ที่ขึ้นอยู่กับการrJavaทำงานและไม่เกิดข้อผิดพลาดใด ๆ

ตอนนี้ฉันสามารถrJavaทำงานได้ถ้าฉันเปิด RStudio จากบรรทัดคำสั่งด้วยรหัสที่ให้ RStudio เป็นเส้นทาง java (ตามที่ระบุไว้ด้านบน) อย่างไรก็ตามฉันต้องการหาวิธีแก้ไขปัญหาพื้นฐานไม่ว่าจะเป็นอะไรก็ตามเพื่อให้ RStudio สามารถเปิดได้ด้วยวิธีปกติของ Mac โดยไม่ต้องใช้ kludge บรรทัดคำสั่ง ฉันยังกังวลว่าการติดตั้ง Java เวอร์ชันเก่าอาจทำให้เกิดปัญหาได้

ใครมีความคิดเกี่ยวกับวิธีการวินิจฉัยและแก้ไขปัญหานี้หรือไม่?


โซลูชันนี้ยังใช้ได้กับคุณใน El Capitan หรือไม่ ฉันได้ผลก่อนที่จะใช้LD_LIBRARY_PATH=$(/usr/libexec/java_home)/jre/lib/server: open -a RStudioเคล็ดลับ แต่มันไม่ได้ผลอีกต่อไป ฉันได้เขียนบล็อกโพสต์เกี่ยวกับปัญหานี้และอธิบายปัญหานี้ที่นั่น ฉันสงสัยว่าคนอื่นประสบปัญหานี้เช่นกันในการกำหนดค่านี้หรือว่าเป็นความผิดของฉัน
Paul Klemm

ยังใช้Yosemiteอยู่เลยไม่แน่ใจ El Capitanดูด้านล่างสำหรับคำตอบที่เกี่ยวข้องกับ
eipi10

โอเคฉันคิดว่าจะตั้งคำถามใหม่แล้ว ใช่El Capitanวิธีแก้ปัญหาด้านล่างนี้มีประโยชน์ทันทีที่RStudioโหลดได้rJavaตามที่คาดไว้
Paul Klemm

2
มันใช้งานได้หลังจากที่ฉันรีสตาร์ท RStudio
Pranay Aryal

ในการวินิจฉัยให้ลองotool -L /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so รับรายชื่อไลบรารีที่แชร์และวิธีการแก้ไข ฉันไม่แน่ใจว่าจะค้นพบเนื้อหารันไทม์ของไฟล์@rpath.
Dave X

คำตอบ:


279

ฉันมีปัญหาเดียวกันและทำตามขั้นตอนเดียวกับคุณ ขั้นตอนสุดท้ายในการอนุญาตให้เริ่ม RStudio ผ่าน Finder / Spotlight คือการเชื่อมโยง libjvm.dylib กับ / usr / local / lib:

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

-f แฟล็กถูกเพิ่มเพื่อบังคับให้เขียนทับไฟล์ / ลิงก์ที่มีอยู่


4
ทำงานเพื่อแก้ไขปัญหาเดียวกันเมื่อการอัปเกรดจาก El Capitan เป็น Sierra เสร็จสิ้น +1
Murta

2
สิ่งนี้ช่วยแก้ปัญหาได้มากมาย โดยเฉพาะอย่างยิ่งหากข้อผิดพลาดดั้งเดิมมาจากcannot jfindclass[[1]]ที่อาจมาจาก rJava และไดรเวอร์ JDBC
Jenks

1
ฉันต้องเรียกใช้คำสั่งนี้ทุกครั้งที่อัปเดต Java บน Macbook Pro ยังคงใช้งานได้บน macOS Sierra 10.12.5 และ Java Version 8 Update 141
thiagoveloso

11
เกือบจะได้ผลสำหรับฉัน นอกจากนี้ฉันต้องเพิ่ม symlink ในกรอบ R ให้กับ/usr/local/lib/libjvm.dylibไฟล์เนื่องจาก / usr / local / lib / ดูเหมือนจะไม่อยู่ใน @rpath ตัวอย่าง:ln -s /usr/local/lib/libjvm.dylib /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/
Dave X

1
นี่อาจเป็นประโยชน์สำหรับgithub.com/snowflakedb/dplyr-snowflakedb/wiki/…
user2079550

53

บน OSX El Capitan 10.11 ผู้ใช้ไม่มีสิทธิ์เขียนถึง / usr / lib ให้ใช้คำสั่งต่อไปนี้แทน:

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

29

คุณสามารถโหลด libjvm.dylib อย่างชัดเจนโดยการเรียกใช้

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

เป็นไปได้แน่นอน แต่ไม่สะดวก คำตอบที่ได้รับการยอมรับน่าจะเป็นตัวเลือกที่ดีกว่า +1เพื่อเสนอทางเลือกอื่น
thiagoveloso

27

บน macOS High Sierra (10.13.1) และ Java เวอร์ชัน 9 คุณต้องใช้เส้นทาง JVM ที่แตกต่างกันเล็กน้อย (สังเกตjreโฟลเดอร์ที่หายไปในเส้นทางเทียบกับคำแนะนำสำหรับ Java เวอร์ชันก่อนหน้า):

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

คุณต้องแจ้ง R เกี่ยวกับ 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/

น่ากลัว ได้ผล! ปรากฏว่าคำแนะนำสำหรับ El Capitan ใช้ไม่ได้กับ Sierra
KarthikS

ขอบคุณมากสิ่งนี้ได้ผลสำหรับฉันเช่นกัน macOS High Sierra 10.13.2
pat_krat

สิ่งนี้ช่วยฉันได้ ฉันไม่ได้ทำส่วนการแจ้งเตือน R มันยังคงทำงาน ขอบคุณมาก :)
Harish

17

คำสั่งต่อไปนี้ใช้งานได้:

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

หลังจากนั้นใน RStudio การโหลด rJava จะทำงานผ่านการโหลดแพ็คเกจ "xlsx"

library("xlsx")

สภาพแวดล้อม PS # 1: Mac OS X El Capitan 10.11.3+ พร้อม RStudio 0.99.491+ และ R 3.2.3+ (ตอนนี้ฉันได้ทดสอบสิ่งนี้ด้วยบน macOS Sierra (10.12) และ R.3.3.1 ด้วย)

ป.ล. # 2 ฉันพบว่าopenxlsxมันเร็วกว่ามากและไม่ได้ใช้ Java ในการทำงานดังนั้นฉันจึงใช้แพ็คเกจนั้น หวังว่าจะช่วยคนอื่น ๆ


1
ขอบคุณเพื่อนของฉันคุณช่วยชีวิตฉันไว้ ฉันลองใช้วิธีแก้ปัญหาอื่น ๆ ที่พบ แต่นี่เป็นวิธีที่แก้ปัญหาของฉันได้
Matteo De Felice

1
ผู้ใช้ El Cap รายอื่น (แต่ใช้ MacGUI) พร้อมโหวตขอบคุณ พยายามทำตั้งแต่ครั้งแรกเนื่องจากดูเหมือนง่ายที่สุด (และความพยายามก่อนหน้านี้เกี่ยวกับคำแนะนำในการติดตั้ง Java runtime 1.6 ไม่สามารถแก้ไขปัญหาได้) และประสบความสำเร็จในทันทีกับ pkg: rJava และการพึ่งพา pkg; XLConnect อาจต้องติดตั้ง Java 1.6 รุ่นเก่าที่มีให้จาก Oracle และเชื่อมโยงจากหน้า Apple
IRTFM

1
สวัสดีคำแนะนำของคุณใช้ได้กับ MacOS High Sierra ขอบคุณมาก !!
user8193079

1
openxlsxFTW!
ฟ้อง

ใช่ @iled: ฉันเห็นด้วยดีกว่าใช้openxlsxต่อไป
Sander W. van der Laan

7

คุณควรจะสามารถใช้ CRAN rJava ได้โดยไม่จำเป็นต้องคอมไพล์rJavaใหม่หรือทำขั้นตอนเพิ่มเติมใด ๆ โดยการลิงก์ไลบรารีที่แบ่งใช้กับไดเร็กทอรีไลบรารีเฟรมเวิร์ก R

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

6

นี่คือวิธีกำหนดค่าให้ทำงานอย่างถูกต้องบน Mac สองเครื่องที่ใช้ MacOS X El Capitan (10.11.6):

  1. ถอนการติดตั้ง 'rJava' โดยออกคำสั่งต่อไปนี้ในหน้าต่างเทอร์มินัล:

    Rscript -e 'remove.packages("rJava")'
    sudo Rscript -e 'remove.packages("rJava")'
  2. ดาวน์โหลดและติดตั้งซอฟต์แวร์ Java จาก Oracle: https://www.java.com/en/download/mac_download.jsp

  3. เพิ่มบรรทัดต่อไปนี้เพื่อ/Users/<userid>/.bashrcใช้โปรแกรมแก้ไขที่คุณชื่นชอบ:

    # Set JAVA_HOME so rJava package can find it
    export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)/jre
  4. ปิดและรีสตาร์ทหน้าต่างเทอร์มินัล R และ RStudio (เพื่อรับการเปลี่ยนแปลง.bashrc)

  5. เรียกใช้คำสั่งต่อไปนี้ในหน้าต่าง Terminal:

    sudo ln -sf $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
  6. เรียกใช้คำสั่งต่อไปนี้ในหน้าต่าง Terminal:

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

ฉันได้รับข้อผิดพลาด Licuuc library / linker ขณะทำตามสิ่งนี้คุณสามารถอธิบายได้หรือไม่? กำลังพยายามติดตั้งบน macOS Sierra เพิ่มเติมที่นี่ (ก่อนหน้านี้ใน El Capitan)
hhh

5

นี่คือขั้นตอนง่ายๆสำหรับมัน:

  1. ลบแพ็คเกจ rJava: remove.packages (rJava)
  2. ปิด R
  3. ติดตั้ง Java ล่าสุดบน Mac ของคุณ
  4. เปิดเทอร์มินัลและพิมพ์คำสั่งนี้: sudo R CMD javareconf
  5. เปิด R และติดตั้ง rJava ด้วยคำสั่งนี้:

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


ฉันทำสิ่งนี้ก่อนที่จะมาจบที่นี่ มันทำให้ไลบรารีที่ขึ้นกับ rjava ของฉันติดตั้ง แต่ไม่เริ่มทำงาน การเชื่อมโยงlibjvm.dylibเข้าสู่/usr/local/libเริ่มต้นด้วย :)
jonalv

3

ปัญหาไม่พบอิมเมจเกิดขึ้นกับการติดตั้งใหม่ล่าสุดบน OSX High Sierra ที่มี Java SE 10 JDK ล่าสุด

ฉันสามารถแก้ไขปัญหาเส้นทางด้วย rJava โดยใช้การแก้ไขที่พบในหน้าปัญหา rJava Github: https://github.com/su/rJava/issues/78

R CMD javareconf JAVA_CPPFLAGS = -I / System / Library / Frameworks / JavaVM.framework / Headers


1

สิ่งที่ใช้ได้ผลกับฉันบน MAC:

  1. ในของคุณ~/.profileหรือ~/.bashrcเพิ่มบรรทัดนี้: %export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home

    1.1 % source .profile(หรือ% 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. จากเทอร์มินัลให้ป้อนคำสั่งนี้: %sudo R CMD javareconf
  6. install.packages("rJava", dependencies = TRUE, type = "source")
  7. install.packages("rJava", dependencies = TRUE, type = "source")
  8. โหลดไฟล์ library("rJava", "RWeka")

ขอให้โชคดี


1

อาจจะเป็นอีกคำตอบง่ายๆที่ไม่โดนระบบไฟล์ของคุณ:

$ 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

(แทนที่jdk1.8.0_131.jdkด้วยเส้นทาง JDK ของคุณ)


2
ฉันมี homebrew R 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และคำสั่งที่แน่นอนที่ทำงานสำหรับฉันก็คือ: ฉันสามารถเห็นได้ว่า rpath หายไปด้วยotool -l /usr/local/lib/R/3.3/site-library/rJava/libs/rJava.so | grep LC_RPATH
Ian

@Ian บางทีคุณอาจจะรู้วิธีแก้ปัญหานี้ที่นี่ซึ่งฉันได้ติดตั้ง Java กับ Homebrew และตอนนี้พยายามทำให้ rJava ทำงาน ไอเดีย?
hhh

1

ตรวจสอบตำแหน่งของไฟล์ libjvm.dylib

ลองทำในกรณีของฉันสิ่งนี้ได้ผล:

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

1

ฉันดำเนินการแก้ไขปัญหาทั้งหมดที่พบจากนั้นติดตั้ง jdk-11.0.1_osx-x64_bin.dmg จาก: ดาวน์โหลด Oracle

ทุกอย่างทำงานได้อย่างสมบูรณ์หลังจากนั้น

ตรวจสอบเวอร์ชันของไลบรารีที่ไม่ได้โหลดเมื่อคุณเรียกใช้ไลบรารี ('rJava') และจับคู่กับเวอร์ชันจาวาที่คุณต้องการติดตั้ง


1

ฉันสังเกตว่า 'rJava' ค่อนข้างเข้มงวดเกี่ยวกับเวอร์ชัน JDK ในขณะที่โหลดใน Rstudio
ในกรณีของฉัน (Mac OS 10.14.6 - Mojave) ฉันได้ติดตั้ง jdk-13 ซึ่งทดสอบกับ jdk-11
ฉันได้เชื่อมโยงเวอร์ชัน JDK ของฉันกับไดเร็กทอรีที่ไม่มีอยู่จริงซึ่งถือว่าถูกต้องโดย Rstudio (JDK 11):

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

และน่าแปลกที่มันใช้งานได้อย่างมีเสน่ห์ ...
BTW ไม่มีปัญหาในการเรียกใช้ 'rJava' ตามคำแนะนำก่อนหน้าในภาษา R ดั้งเดิม



0

บรรทัดด้านล่างนี้ได้แก้ไขปัญหาเดียวกันกับที่ฉันมีกับrJavaแพ็คเกจเหมือนกับที่คนอื่น ๆ ในการสนทนานี้ทำ ฉันแน่ใจว่ามีวิธีแก้ปัญหานี้มากกว่าหนึ่งวิธีและฉันขอขอบคุณทุกคนอย่างจริงใจสำหรับการมีส่วนร่วมของพวกเขาเพราะบางครั้งหนึ่งบรรทัดเช่นเดียวกับด้านล่างนี้ช่วยประหยัดเวลาได้มากจากการทิ้งขยะ!

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

0

เรียกใช้สิ่งต่อไปนี้ในบรรทัดคำสั่ง: sudo R CMD javareconf

วิธีแก้ปัญหาหลายอย่างข้างต้นได้กล่าวถึงเรื่องนี้แล้ว แต่ก็แนะนำให้ลบออกและติดตั้งrJavaแพ็คเกจใหม่ในภายหลัง ฉันพบว่าขั้นตอนเพิ่มเติมเหล่านั้นไม่จำเป็น


ฉันลองวิธีแก้ปัญหาของคุณแล้วsudo R CMD javareconfแต่library(rJava)ก็ยังให้ข้อผิดพลาดเหมือนเดิม: 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

คุณสามารถเปลี่ยนการอ้างอิงใน R โดยใช้คำสั่งต่อไปนี้:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.