2015-04-29 8 views
17

Mam pakiet „javaOnLoadFailed” (tylko minimalny pakiet do testowania mój problem, stąd nazwa dziwne), która importuje rJava. Dostaję błędy "rJava", gdy próbuję albo sprawdzić() lub zainstalować() pakiet, nawet jeśli wymaga (rJava) działa dobrze..onLoad zawiodły w loadNamespace() dla „rJava” podczas instalowania pakietu

zainstalować() daje następujące błędy:

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

używam R 3.2.0 od wewnątrz architekt z 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 

Odpowiedz

23

Zmienna środowisko Java jest pusty

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

Na podstawie suggestion próbowałem ustawić zmienną środowiskową JAVA na poi NT w wersji 64-bitowej Javy (ponieważ używam R 64 bit, jak można zobaczyć z sessionInfo, ale to nie działa:

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

Następnie próbowałem ustawić zmienną taką, że środowisko JAVA wskazuje na 32-bitową wersję Java w moim systemie, a następnie działa!

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

ja nie bardzo rozumiem, dlaczego muszę wskazać Java 32 bit by bit R64 pracę, ale to, co wydaje się być przypadek.

Nawiasem mówiąc, nie potknij się o nazwę mojego pakietu "javaOnLoadFailed". Właśnie stworzyłem minimalny pakiet o tej nazwie, aby przetestować problem.

+3

spróbuj dodać 'INSTALL_opts =„- no-wieloarchitekturowości”' jako parametr podczas instalacji, aby zainstalować tylko dla obecnej architektury – Dason

+1

Dzięki za sugestia @Dason – Adi

2

Wiele pakietów nie zainstalować, ponieważ nie są przeznaczone do pracy na platformie i386, ale standardowy proces instalacji próbuje zrobić. Użytkownicy tracić czasu z jvm.dll i PATH i JAVA_HOME kiedy prawdziwy dylemat jest zmuszenie zainstalowanych po prostu zapomnieć o i386. Użyj opcji install.packages. (Działa również, gdy jest używana biblioteka drat. (Zasługa Dason)

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

Jest również kluczem do rJava pracuje nad [Appveyor] (https://ci.appveyor.com) w 'sekcji build_script' musimy linię' - R -e „install.packages ('rJava' repo = 'http://cran.us.r-project.org', INSTALL_opts = '- no-wieloarchitekturowości') "' – Ben

+0

Wydaje się że nie działa z install_github stoi podobny problem? – victordongy

1

Pamiętaj problemu jest to, że R nie wie, gdzie jest jvm.dll. Po ustawieniu JAVA_HOME użyć ścieżkę katalogu .. zawiera plik dll można go znaleźć w bin\client lub bin\server komenda wówczas postać:

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