2015-04-29 5 views
17

Ich habe ein Paket "javaOnLoadFailed" (nur ein minimales Paket zum Testen meines Problems, daher der seltsame Name), die rJava importiert. Ich bekomme 'rJava' Fehler, wenn ich versuche, das Paket zu überprüfen() oder zu installieren(), obwohl require (rJava) selbst gut funktioniert..onLoad fehlgeschlagen in loadNamespace() für 'rJava' bei der Installation eines Pakets

installieren() gibt die folgenden Fehler:

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

I R bin mit 3.2.0 aus Architekten, mit Session():

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 

Antwort

23

Das Java-Umgebungsvariable ist leer

Basierend auf suggestion, habe ich versucht, die JAVA-Umgebungsvariable auf poi zu setzen nt auf die 64-Bit-Version von Java (weil ich R 64 Bit leite, wie Sie aus der Session sehen konnten, aber das funktioniert nicht:

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

Ich habe dann versucht, das JAVA-Umgebungsvariable zu setzen, so dass Es zeigt auf die 32-Bit-Version von Java auf meinem System, und dann funktioniert es!

> 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. 

Ich verstehe nicht ganz, warum ich auf Java 32-Bit-zu-Punkt benötigen R 64-Bit-Arbeit zu machen, aber das ist, was der Fall zu sein scheint.

Übrigens stolpere nicht über meinen Paketnamen "javaOnLoadFailed". Ich habe gerade ein minimales Paket mit diesem Namen erstellt, um das Problem zu testen.

+3

Try 'INSTALL_opts = Hinzufügen "- no-multiarch"' als Parameter bei der Installation nur installieren für die aktuelle Architektur – Dason

+1

Danke für der Vorschlag @Dason – Adi

2

Viele Pakete schlagen fehl, da sie nicht auf der i386-Plattform ausgeführt werden sollen, aber der Standardinstallationsprozess versucht dies zu tun. Benutzer vergeuden viel Zeit mit jvm.dll und PATH und JAVA_HOME, wenn der wirkliche Fix darin besteht, die Installation zu zwingen, nur über i386 zu vergessen. Verwenden Sie die Option für Installationspakete. (Dies funktioniert auch, wenn drat Bibliothek verwendet wird. (Kredit geht an Dason)

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

Dies ist auch der Schlüssel, um rJava am [Appveyor] (https://ci.appveyor.com) arbeiten zu lassen: Im Abschnitt 'build_script' brauchen wir eine Zeile' - R -e "install.packages ('rJava', repos = 'http://cran.us.r-project.org', INSTALL_opts = '- no-multiarch') "' – Ben

+0

Scheint es funktioniert nicht mit install_github mit ähnlichen Problem konfrontiert? – victordongy

1

das Problem Denken Sie daran, dass R nicht weiß, wo jvm.dll ist. Wenn Sie JAVA_HOME den Pfad des Verzeichnisses festgelegt, dass .. die dLL-Datei enthält Sie können es in bin\client oder bin\server finden Der Befehl wird dann:

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

Verwandte Themen