0

我正在尝试在OpenSUSE 11.3上的 R 2.14.1-9.1 上安装rJava包。我见过这个问题,但它是针对 Ubuntu 的。我已经安装了 Sun JDK 并重新配置了系统以使用它。

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:~> 

编辑 1: 更新了 JDK 和 JRE。现在,当我运行时出现稍微不同的错误install.packages("rJava"),我得到以下错误输出(发布了新错误,并以粗体结尾):

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

新的错误行:

检查 JNI 数据类型...配置:错误:一种或多种 JNI 类型与相应的本机类型不同。您可能需要使用非标准编译器标志或不同的编译器来解决此问题。

我确实运行了R CMD javareconfas root。它使 cpp 标志字段为空。我知道这是它失败的原因之一,但不知道如何解决它。

我已经尝试过使用 dependencies=TRUE 选项并明确指定 repo 的安装命令(例如 repo="blah blah")。没有任何效果。

我不知道如何更新 OpenSUSE。但对于 SUSE,似乎没有简单的方法可以做到这一点,这与 Ubuntu 不同,这里明确给出了步骤。

任何帮助表示赞赏。

4

3 回答 3

5

尽管正在运行 running update-alternatives --config javacJAVA_HOME但未更新。因此我手动设置它:

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

您必须将上述命令作为root.

然后跑了R CMD javareconf。有一些进展,安装超出了以前失败的地方。但它仍然给了我以下错误:

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
>

然后根据错误中的建议,安装R-devel-rpm,如下所示:

zypper install R-patched R-patched-devel

(运行上面的命令为root

在此之后,运行 R 并"install.package("rJava")"工作。

几乎 5 小时的挫败感和 4 票反对一个真正的问题......但终于松了一口气!:)

于 2012-01-17T19:01:37.600 回答
2
# R CMD javareconf
Updating Java configuration in /usr/lib/R Done.

> install.packages("rJava")
* DONE (rJava)
于 2012-12-07T13:29:43.763 回答
0

惊人的。在 Gentoo 下也是一样。做

env | grep JAVA

检查您的环境。

于 2012-11-12T08:29:48.393 回答