简体   繁体   中英

Installing rJava under R 2.14 and OpenSUSE fails

I am trying to install rJava package on R 2.14.1-9.1 on OpenSUSE 11.3 . I have seen this question, but it is for Ubuntu. I have installed Sun JDK and reconfigured the system to use it.

admin@linux-nb3w:~> java -version
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode)
admin@linux-nb3w:~> 

EDIT 1: Updated the JDK and JRE. Now there is slightly different error when I run install.packages("rJava") , I get the following output with error (new error is posted and the end in bold ):

> install.packages("rJava")
Installing package(s) into ‘/home/admin/R/i686-pc-linux-gnu-library/2.14’
(as ‘lib’ is unspecified)
--- Please select a CRAN mirror for use in this session ---
Loading Tcl/Tk interface ... done
trying URL 'http://ftp.iitm.ac.in/cran/src/contrib/rJava_0.9-3.tar.gz'
Content type 'application/x-gzip' length 537153 bytes (524 Kb)
opened URL
==================================================
downloaded 524 Kb

* installing *source* package ‘rJava’ ...
** package ‘rJava’ successfully unpacked and MD5 sums checked
checking for gcc... gcc -std=gnu99
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...                                                                                                                                                                                                                                          
checking for suffix of object files... o                                                                                                                                                                                                                                       
checking whether we are using the GNU C compiler... yes                                                                                                                                                                                                                        
checking whether gcc -std=gnu99 accepts -g... yes                                                                                                                                                                                                                              
checking for gcc -std=gnu99 option to accept ISO C89... none needed                                                                                                                                                                                                            
checking how to run the C preprocessor... gcc -std=gnu99 -E                                                                                                                                                                                                                    
checking for grep that handles long lines and -e... /usr/bin/grep                                                                                                                                                                                                              
checking for egrep... /usr/bin/grep -E                                                                                                                                                                                                                                         
checking for ANSI C header files... yes                                                                                                                                                                                                                                        
checking for sys/wait.h that is POSIX.1 compatible... yes                                                                                                                                                                                                                      
checking for sys/types.h... yes                                                                                                                                                                                                                                                
checking for sys/stat.h... yes                                                                                                                                                                                                                                                 
checking for stdlib.h... yes                                                                                                                                                                                                                                                   
checking for string.h... yes                                                                                                                                                                                                                                                   
checking for memory.h... yes                                                                                                                                                                                                                                                   
checking for strings.h... yes                                                                                                                                                                                                                                                  
checking for inttypes.h... yes                                                                                                                                                                                                                                                 
checking for stdint.h... yes                                                                                                                                                                                                                                                   
checking for unistd.h... yes                                                                                                                                                                                                                                                   
checking for string.h... (cached) yes                                                                                                                                                                                                                                          
checking sys/time.h usability... yes                                                                                                                                                                                                                                           
checking sys/time.h presence... yes                                                                                                                                                                                                                                            
checking for sys/time.h... yes                                                                                                                                                                                                                                                 
checking for unistd.h... (cached) yes                                                                                                                                                                                                                                          
checking for an ANSI C-conforming const... yes                                                                                                                                                                                                                                 
checking whether time.h and sys/time.h may both be included... yes                                                                                                                                                                                                             
configure: checking whether gcc -std=gnu99 supports static inline...                                                                                                                                                                                                           
yes                                                                                                                                                                                                                                                                            
checking whether setjmp.h is POSIX.1 compatible... yes                                                                                                                                                                                                                         
checking whether sigsetjmp is declared... yes                                                                                                                                                                                                                                  
checking whether siglongjmp is declared... yes                                                                                                                                                                                                                                 
checking Java support in R... present:                                                                                                                                                                                                                                         
interpreter : '/usr/bin/java'                                                                                                                                                                                                                                                  
archiver    : '/usr/bin/jar'                                                                                                                                                                                                                                                   
compiler    : '/usr/bin/javac'                                                                                                                                                                                                                                                 
header prep.: '/usr/bin/javah'                                                                                                                                                                                                                                                 
cpp flags   : '-I/usr/lib/jvm/java-1.6.0-sun-1.6.0/jre/../include -I/usr/lib/jvm/java-1.6.0-sun-1.6.0/jre/../include/linux'                                                                                                                                                    
java libs   : '-L/usr/lib/jvm/java-1.6.0-sun-1.6.0/jre/lib/i386/client -L/usr/lib/jvm/java-1.6.0-sun-1.6.0/jre/lib/i386 -L/usr/lib/jvm/java-1.6.0-sun-1.6.0/jre/../lib/i386 -L/usr/java/packages/lib/i386 -L/lib -L/usr/lib -ljvm'
checking whether JNI programs can be compiled... yes
checking JNI data types... configure: error: One or more JNI types differ from the corresponding native type. You may need to use non-standard compiler flags or a different compiler in order to fix this.
ERROR: configuration failed for package ‘rJava’
* removing ‘/home/admin/R/i686-pc-linux-gnu-library/2.14/rJava’

The downloaded packages are in
        ‘/tmp/RtmpIFKEha/downloaded_packages’
Warning message:
In install.packages("rJava") :
  installation of package ‘rJava’ had non-zero exit status
> 

New error line:

checking JNI data types... configure: error: One or more JNI types differ from the corresponding native type. You may need to use non-standard compiler flags or a different compiler in order to fix this.

I did run the R CMD javareconf as root . It leaves the cpp flags field empty. I know that this is one reason why it is failing, but don't know how to resolve it.

I have tried this install command with dependencies=TRUE option and by specifying repo explicitly as well (eg repo="blah blah"). Nothing worked.

I don't know how to do an update for the OpenSUSE. But it looks like there is no simple way to do it for SUSE, unlike for Ubuntu, for which steps are clearly given here .

Any help is appreciated.

Despite of running running update-alternatives --config javac , JAVA_HOME was not updated. Hence I set it manually:

export JAVA_HOME=/usr/lib/jvm/java-1.6.0-sun-1.6.0.u6

You have to run above command as root .

Then ran R CMD javareconf . There was some progress, installation went beyond where it was failing previously. But it still gave me following error:

Warning: R include directory is empty -- perhaps need to install R-devel.rpm or similar
gcc -std=gnu99 -I/usr/lib/R/include -I. -I/usr/lib/jvm/java-1.6.0-sun-1.6.0/include -I/usr/lib/jvm/java-1.6.0-sun-1.6.0/include/linux -I/usr/local/include    -fpic  -fomit-frame-pointer -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -c Rglue.c -o Rglue.o
In file included from Rglue.c:2:0:
rJava.h:23:15: fatal error: R.h: No such file or directory
compilation terminated.
make: *** [Rglue.o] Error 1
ERROR: compilation failed for package ‘rJava’
* removing ‘/usr/lib/R/library/rJava’

The downloaded packages are in
        ‘/tmp/Rtmp3zqlgI/downloaded_packages’
Updating HTML index of packages in '.Library'
Making packages.html  ... done
Warning message:
In install.packages("rJava") :
  installation of package ‘rJava’ had non-zero exit status
>

Then as per the suggestion in the error, installed the R-devel-rpm , like this:

zypper install R-patched R-patched-devel

(Run above command as root )

After this, running R and "install.package("rJava")" worked.

Almost 5 hours of frustration and 4 down votes for a genuine question.....but finally relief! :)

# R CMD javareconf
Updating Java configuration in /usr/lib/R Done.

> install.packages("rJava")
* DONE (rJava)

Awesome. The same thing under Gentoo. Do

env | grep JAVA

to check your environment.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM