2015-04-29 15 views
17

Tôi có gói "javaOnLoadFailed" (chỉ là gói tối thiểu để kiểm tra vấn đề của tôi, do đó tên lạ) nhập rJava. Tôi nhận được 'rJava' lỗi khi tôi cố gắng hoặc là kiểm tra() hoặc cài đặt() gói, mặc dù yêu cầu (rJava) chính nó hoạt động tốt..onLoad không thành công trong loadNamespace() cho 'rJava' khi cài đặt gói

cài đặt() cung cấp cho các lỗi sau đây:

> install() 
Installing javaOnloadFailed 
"C:/Program Files/R/R-3.2.0/bin/x64/R" --no-site-file --no-environ --no-save \ 
--no-restore CMD INSTALL \ 
"C:/Projects/stackoverflow/javaOnloadFailed/javaOnLoadFailed" \ 
--library="C:/Users/adb2018/Documents/R/win-library/3.2" --with-keep.source \ 
--install-tests 

* installing *source* package 'javaOnloadFailed' ... 
** R 
** preparing package for lazy loading 
** help 
*** installing help indices 
** building package indices 
** testing if installed package can be loaded 
*** arch - i386 
Error : .onLoad failed in loadNamespace() for 'rJava', details: 
    call: inDL(x, as.logical(local), as.logical(now), ...) 
    error: unable to load shared object 'C:/Users/adb2018/Documents/R/win-library/3.2/rJava/libs/i386/rJava.dll': 
    LoadLibrary failure: %1 is not a valid Win32 application. 

Error: loading failed 
Execution halted 
*** arch - x64 
ERROR: loading failed for 'i386' 
* removing 'C:/Users/adb2018/Documents/R/win-library/3.2/javaOnloadFailed' 
Error: Command failed (1) 

Tôi đang sử dụng R 3.2.0 từ bên trong Kiến trúc sư, với sessionInfo():

R version 3.2.0 (2015-04-16) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 

locale: 
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252 
[3] LC_MONETARY=English_United States.1252 
[4] LC_NUMERIC=C       
[5] LC_TIME=English_United States.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] devtools_1.7.0.9000 rj_2.0.3-2   

loaded via a namespace (and not attached): 
[1] tools_3.2.0 rj.gd_2.0.0-1 

Trả lời

23

Biến môi trường Java trống

> Sys.getenv('JAVA') 
[1] "" 

Dựa trên suggestion, tôi đã thử đặt biến môi trường JAVA thành poi nt lên phiên bản 64 Bit của Java (vì tôi đang chạy R 64 bit, như bạn có thể nhìn thấy từ sessionInfo, nhưng điều đó không làm việc:

> Sys.setenv(JAVA_HOME='C:\\Program Files\\Java\\jre1.8.0_45') 
> install() 
Installing javaOnloadFailed 
"C:/Program Files/R/R-3.2.0/bin/x64/R" --no-site-file --no-environ --no-save \ 
    --no-restore CMD INSTALL \ 
    "C:/Projects/stackoverflow/javaOnloadFailed/javaOnLoadFailed" \ 
    --library="C:/Users/adb2018/Documents/R/win-library/3.2" --with-keep.source \ 
    --install-tests 

* installing *source* package 'javaOnloadFailed' ... 
** R 
** preparing package for lazy loading 
** help 
*** installing help indices 
** building package indices 
** testing if installed package can be loaded 
*** arch - i386 
Error : .onLoad failed in loadNamespace() for 'rJava', details: 
    call: inDL(x, as.logical(local), as.logical(now), ...) 
    error: unable to load shared object 'C:/Users/adb2018/Documents/R/win-library/3.2/rJava/libs/i386/rJava.dll': 
    LoadLibrary failure: %1 is not a valid Win32 application. 

Error: loading failed 
Execution halted 
*** arch - x64 
ERROR: loading failed for 'i386' 
* removing 'C:/Users/adb2018/Documents/R/win-library/3.2/javaOnloadFailed' 
Error: Command failed (1) 

Sau đó tôi đã cố gắng để thiết lập các biến môi trường JAVA như vậy nó trỏ tới phiên bản 32 bit của Java trên hệ thống của tôi, và sau đó nó hoạt động!

> Sys.setenv(JAVA_HOME='C:\\Program Files (x86)\\Java\\jre1.8.0_45\\') 
> install() 
Installing javaOnloadFailed 
"C:/Program Files/R/R-3.2.0/bin/x64/R" --no-site-file --no-environ --no-save \ 
    --no-restore CMD INSTALL \ 
    "C:/Projects/stackoverflow/javaOnloadFailed/javaOnLoadFailed" \ 
    --library="C:/Users/adb2018/Documents/R/win-library/3.2" --with-keep.source \ 
    --install-tests 

* installing *source* package 'javaOnloadFailed' ... 
** R 
** preparing package for lazy loading 
** help 
*** installing help indices 
** building package indices 
** testing if installed package can be loaded 
*** arch - i386 
*** arch - x64 
* DONE (javaOnloadFailed) 

[INFO] Updating the R environment index started... 

[INFO] The R environment index was updated successfully. 

Tôi không hiểu tại sao tôi cần trỏ tới Java 32 bit để làm cho R 64 bit hoạt động, nhưng đó là những gì có vẻ như vậy.

Nhân tiện, đừng vấp ngã tên gói của tôi "javaOnLoadFailed". Tôi vừa tạo một gói tối thiểu với tên đó để kiểm tra vấn đề.

+3

Hãy thử thêm 'INSTALL_opts = "- không multiarch" 'như một tham số khi cài đặt để chỉ cài đặt cho kiến ​​trúc hiện tại – Dason

+1

gợi ý @Dason – Adi

2

Nhiều gói không cài đặt được vì chúng không có nghĩa là chạy trên nền tảng i386 nhưng quá trình cài đặt chuẩn cố gắng thực hiện điều đó. Người dùng lãng phí rất nhiều thời gian với jvm.dll và PATH và JAVA_HOME khi sửa chữa thực sự là để buộc cài đặt để chỉ cần quên về i386. Sử dụng tùy chọn cho install.packages. (Điều này cũng hoạt động khi thư viện drat được sử dụng. (Tín dụng đi vào Dason)

install.packages("SqlRender",INSTALL_opts="--no-multiarch") 
+0

Đây cũng là chìa khóa để rJava làm việc trên [Appveyor] (https://ci.appveyor.com): trong phần 'build_script', chúng ta cần một dòng của' - R -e 'install.packages ('rJava', repos = 'http://cran.us.r-project.org', INSTALL_opts = '- no-multiarch') "' – Ben

+0

Dường như nó không hoạt động với install_github phải đối mặt với vấn đề tương tự? – victordongy

1

Hãy nhớ rằng các vấn đề là R không biết nơi jvm.dll là. Khi bạn thiết lập JAVA_HOME sử dụng đường dẫn của thư mục đó .. chứa các tập tin dll Bạn có thể tìm thấy nó trong bin\client hoặc bin\server lệnh sau đó trở thành:

Sys.setenv(JAVA_HOME='C:\\Program Files\\Java\\jre1.8.0_45\\bin\\client')

Các vấn đề liên quan