2012-11-28 6 views
7

C'è qualcuno che è riuscito a far funzionare rJava 0.9-3 su OS X 10.7.4 con Oracle Java 1.7?come far funzionare rJava 0.9-3 su OS X 10.7.4 con Oracle Java 1.7?

R version 2.15.2 (2012-10-26) -- "Trick or Treat" Platform 
x86_64-apple-darwin9.8.0/x86_64 (64-bit) 

java version "1.7.0_09" 
Java(TM) SE Runtime Environment (build 1.7.0_09-b05) 
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode) 

Ho installato rJava utilizzando sia la funzione install.packages che l'installazione della riga di comando con R 2.15.2. Non ho errori.

$ R CMD INSTALL rJava 
* installing to library ‘/Library/Frameworks/R.framework/Versions/2.15/Resources/library’ 
* installing *binary* package ‘rJava’ ... 

* DONE (rJava) 
$ 

Se uso Preferenze Java per mettere 1.7 il primo della lista, ma lasciare 1.6 "on", Rjava inizia sempre 1.6.

Se uso Preferenze Java mettere 1,7 prima e spegnere 1,6, Rjava fa questo:

> library(rJava) 
> .jinit() 
JavaVM: requested Java version ((null)) not available. Using Java at "" instead. 
JavaVM: Failed to load JVM: /bundle/Libraries/libserver.dylib 
JavaVM FATAL: Failed to load the jvm library. 
Error in .jinit() : JNI_GetCreatedJavaVMs returned -1 
> 

Tuttavia, utilizzando la funzione di sistema, R per sé trova Java 1.7.

> system("java -version") 
java version "1.7.0_09" 
Java(TM) SE Runtime Environment (build 1.7.0_09-b05) 
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode) 
> 

Vuol 1,7 bisogno di una voce speciale in /System/Library/Java/JavaConfig.plist?

La directory Versions deve essere modificata per 1.7? E 'strano che l'attuale va ad A, che finisce con il 1,7, mentre CurrentJDK è mappato a 1,6

$cd /System/Library/Frameworks/JavaVM.framework/Versions/ 
$ls -la 
total 64 
drwxr-xr-x 11 root wheel 374 Sep 26 10:10 . 
drwxr-xr-x 11 root wheel 374 Nov 26 09:24 .. 
lrwxr-xr-x 1 root wheel 10 Sep 26 10:09 1.4 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 Sep 26 10:09 1.4.2 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 Sep 26 10:09 1.5 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 Sep 26 10:09 1.5.0 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 Sep 26 10:09 1.6 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 Sep 26 10:09 1.6.0 -> CurrentJDK 
drwxr-xr-x 8 root wheel 272 Nov 26 09:24 A 
lrwxr-xr-x 1 root wheel 1 Sep 26 10:09 Current -> A 
lrwxr-xr-x 1 root wheel 59 Sep 26 10:09 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents 

Anche con R CMD javareconf correre con il percorso che punta al file 1,7, direttamente o per il/usr/bin/percorsi java, rJava non può ancora trovare o avviare Java 1.7.

La versione 1.7 ha bisogno della variabile JAVA_LD_LIBRARY_PATH?

Makeconf:JAVA = /usr/bin/java 
Makeconf:JAVAC = /usr/bin/javac 
Makeconf:JAVAH = /usr/bin/javah 
Makeconf:JAVA_HOME = /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre 
Makeconf:JAVA_LD_LIBRARY_PATH = 
Makeconf:JAVA_LIBS = -framework JavaVM 
Makeconf:JAVA_CPPFLAGS = -I$(JAVA_HOME)/include 

Makeconf:JAR = /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/bin/jar 
Makeconf:JAVA = /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/bin/java 
Makeconf:JAVAC = /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/bin/javac 
Makeconf:JAVAH = /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/bin/javah 
Makeconf:JAVA_HOME = /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre 
Makeconf:JAVA_LD_LIBRARY_PATH = 
Makeconf:JAVA_LIBS = -framework JavaVM 
Makeconf:JAVA_CPPFLAGS = -I$(JAVA_HOME)/include 

Grazie per qualsiasi aiuto

Update 1:

ho chiesto questo sulla lista statistiche-rosuda-devel e ha ricevuto la seguente risposta da Simon Urbanek. Non penso che Windows e Linux abbiano gli stessi problemi con la necessità di compilare dal sorgente per Java 1.7, dato che lo stiamo eseguendo su Windows e Linux e non abbiamo dovuto compilare rJava. Io riferire una volta ho avuto la possibilità di provare questo:

--- cominciano citazione ---

Si utilizza la binario che è compilato contro il sistema Java (che sul proprio sistema è 1.6), quindi se rimuovi Java 1.6 lo romperesti. Se si desidera utilizzare Java 1.7, sarà necessario riconfigurare R per Java 1.7 e ricompilare rJava per utilizzare tali impostazioni. Si noti che Java di Oracle vive in una posizione completamente diversa (/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk) rispetto al sistema Java (/System/Library/Frameworks/JavaVM.framework), quindi non è intercambiabile.

Inoltre, Oracle Java 1.7 non è un framework, è un gran caos che non è stato progettato per OS X, quindi è necessario impostarlo a mano su impostazioni come su Linux - è piuttosto doloroso. Inoltre richiede overrides ... quindi se vuoi davvero andare giù nella tana del coniglio, questo è ciò che ha funzionato per me:

JAVA_LD_LIBRARY_PATH =/Libreria/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/server JAVA_LIBS = '- L/Libreria/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/server -ljvm' JAVA_CPPFLAGS = '- I/Libreria/Java/JavaVirtualMachines/jdk1. 7.0_09.jdk/Contents/Home/include -I/Libreria/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/include/darwin 'R64 CMD javareconf

Quindi installare rJava dai sorgenti (R64 -> install.packages ("Rjava", type = 'sorgente')). Si noti che è solo a 64 bit, in modo da funzionare solo con i 64-bit R.

---- fine citazione ---

+1

Non ho alcuna conoscenza particolare qui, ma potresti voler installare rJava dal sorgente, o provare la mailing list stats-rosuda-devel. –

+0

L'ho chiesto sulla lista e ho appena ricevuto una risposta. Lo aggiungerò alla domanda originale sopra. – Tod

+0

Grazie per l'aggiornamento che con la risposta di Simon. È più facile da leggere se non è in formato di codice con scorrimento laterale. –

risposta

5

questo funziona per me:

La situazione è che il mio Le directory Java non sono state configurate correttamente.

1) Primo ciclo: sudo R CMD javareconf. Dovrebbe seguente:

Java interpreter : /usr/bin/java 
Java version  : 1.7.0_40 
Java home path : /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre 
Java compiler : /usr/bin/javac 
Java headers gen.: /usr/bin/javah 
Java archive tool: /usr/bin/jar 
Non-system Java on OS X 

trying to compile and link a JNI progam 
detected JNI cpp flags : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/darwin 
detected JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm 
llvm-gcc-4.2 -arch x86_64 -std=gnu99 -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/../include -I/Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/../include/darwin -I/usr/local/include -fPIC -mtune=core2 -g -O2 -c conftest.c -o conftest.o 
llvm-gcc-4.2 -arch x86_64 -std=gnu99 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/usr/local/lib -L/usr/local/lib -o conftest.so conftest.o -L/Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/server -ljvm -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation 


JAVA_HOME  : /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre 
Java library path: $(JAVA_HOME)/lib/server 
JNI cpp flags : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/darwin 
JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm 
Updating Java configuration in /Library/Frameworks/R.framework/Resources 
Done. 

2) In R, eseguire: install.packages("rJava",type='source'). L'installazione dovrebbe restituire DONE (rJava). Si noti che, ho dovuto impostare

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home 

quando ho bisogno di iniziare R come root: sudo R. Per eseguire come utente normale, utilizzare

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre 

E 'successo a me che non ho impostato i collegamenti simbolici di sopra/usr/bin/java * al corrispondente in Java 1.7 (diretto invece alla versione 1.6) e hanno ottenuto tutta la frustrazione da lì. I collegamenti dovrebbero essere come questo: (sembra che solo in Java siano richiesti java, javac, javah e jar).

$ ls -l /usr/bin/ja* 
lrwxr-xr-x 1 root wheel 71 Oct 3 11:44 /usr/bin/jar -> /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/bin/jar 
lrwxr-xr-x 1 root wheel 77 Oct 3 12:14 /usr/bin/jarsigner -> /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/bin/jarsigner 
lrwxr-xr-x 1 root wheel 72 Oct 3 11:44 /usr/bin/java -> /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/bin/java 
lrwxr-xr-x 1 root wheel 73 Oct 3 11:42 /usr/bin/javac -> /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/bin/javac 
lrwxr-xr-x 1 root wheel 75 Oct 3 12:15 /usr/bin/javadoc -> /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/bin/javadoc 
lrwxr-xr-x 1 root wheel 73 Oct 3 11:44 /usr/bin/javah -> /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/bin/javah 
lrwxr-xr-x 1 root wheel 73 Oct 3 12:15 /usr/bin/javap -> /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/bin/javap 
lrwxr-xr-x 1 root wheel 74 Oct 3 12:15 /usr/bin/javaws -> /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/bin/javaws 
+0

# 2 mi ha aiutato, in particolare aggiungendo "type = 'source'" al mio install.packages ("rJava", type = 'source'). Mi sono imbattuto in questo mentre provavo ad installare il pacchetto xlsx. – user2771721

1

Infine, qualcosa ha funzionato!

Simon Urbanek: puoi inserire queste istruzioni nel sito Web di rJava/istruzioni di installazione di cran ...? Questa è la prima volta che sono stato in questa tana del coniglio e sono sicuro di non essere l'unico.

JAVA_LD_LIBRARY_PATH=/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre/lib/server JAVA_LIBS='-L/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre/lib/server -ljvm' JAVA_CPPFLAGS='-I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include/darwin' R CMD javareconf 
Java interpreter : /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre/bin/java 
Java version  : 1.8.0_77 
Java home path : /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home 
Java compiler : /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/bin/javac 
Java headers gen.: /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/bin/javah 
Java archive tool: /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/bin/jar 
System Java on OS X 

trying to compile and link a JNI program 
detected JNI cpp flags : -I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include/darwin 
detected JNI linker flags : -L/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre/lib/server -ljvm 
clang -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include/darwin -I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include -fPIC -Wall -mtune=core2 -g -O2 -c conftest.c -o conftest.o 
clang -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o conftest.so conftest.o -L/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre/lib/server -ljvm -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation 


JAVA_HOME  : /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home 
Java library path: /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre/lib/server 
JNI cpp flags : -I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include/darwin 
JNI linker flags : -L/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre/lib/server -ljvm 
Updating Java configuration in /Library/Frameworks/R.framework/Resources 
override rw-r--r-- root/admin for /Library/Frameworks/R.framework/Resources/etc/Makeconf? (y/n [n]) y 
override rw-r--r-- root/admin for /Library/Frameworks/R.framework/Resources/etc/ldpaths? (y/n [n]) y 
Done. 

R CMD INSTALL rJava_0.9-9.tar.gz