Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 13633|回复: 0

R 之 rJava 包安装错误的解决方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-16 11:45:46 | 显示全部楼层 |阅读模式

    前几天在Ubuntu上安装R中的xlsx包时一直卡在了rJava包的安装上,最终各种google都没能解决问题.直到最后,我回到了安装rJava时的错误记录....我用血的教训证明,错误日志是很重要很重要的!!!!!

    (由于已经成功地排除了错误,且不打算折腾我的电脑,我就从网上copy一个类似的来说明下发生了什么问题)

    运行 install.packages("rJava")并下载解压缩后,日志显示电脑上JDK环境配置有问题.(一大堆的yes后在"checking Java support in R"那里卡住了)

    如下:

    checking Java support in R... present:
    interpreter : '/usr/bin/java'
    archiver    : ''                       #空白
    compiler    : '/usr/bin/javac'
    header prep.: ''                      #空白
    cpp flags   : '-I/usr/share/jdk1.8.0_51/jre/../include -I/usr/share/jdk1.8.0_51/jre/../include/linux'
    java libs   : '-L/usr/share/jdk1.8.0_51/jre/lib/amd64/server -ljvm'
    configure: error: One or more Java configuration variables are not set.
    Make sure R is configured with full Java support (including JDK). Run         #注意此句:JDK环境有误
    R CMD javareconf
    as root to add Java support to R.                   # 这句告诉我们,在确保JDK的安装路径没有问题的情况下应该如何就行修复
    
    If you don't have root privileges, run
    R CMD javareconf -e
    to set all Java-related variables and then install rJava.
    
    ERROR: configuration failed for package ‘rJava’                          #由于安装出错,移除安装包
    * removing ‘/home/cc886/R/x86_64-pc-linux-gnu-library/3.1/rJava’
    Warning in install.packages :
      installation of package ‘rJava’ had non-zero exit status
    
    The downloaded source packages are in
    	‘/tmp/RtmpaX9v6v/downloaded_packages’
    

    事实上我在翻看错误记录看到那两段空白的时候,终于意识到了问题的关键. 一开始在Ubuntu上配置的是用apt-get获取的openjdk环境,无论我如何运行R CMD javareconf 都没能修复这个问题.

    最后,在尝试着上官网下载sunjdk并进行配置的过程中,我发现openjdk和sunjdk相比少了一些文件,即bin文件夹里的javac,javah等等.而Javac立刻让我联想到了错误日志里的"compliler"的空白.于是我用sudo update-alternatives --install ***** 对jar,javah等进行了手动的指定.并发现那两段空白被填补上了.也就是说,这个安装错误信息出现的根本原因就是缺少了jar,javah等的指定(前提是有这些文件)

    如果不对jar,javah进行手动指定,运行sudo R CMD javareconf过程中Java headers gen和Java archive tool项会缺失,如下

    cc886@cc886:~$ sudo R CMD javareconf -e
    [sudo] password for cc886: 
    Java interpreter : /usr/bin/java
    Java version     : 1.8.0_51
    Java home path   : /usr/share/jdk1.8.0_51/jre
    Java compiler    : /usr/bin/javac
    Java headers gen.:                 #缺失
    Java archive tool:                  #缺失
    
    trying to compile and link a JNI progam 
    detected JNI cpp flags    : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/linux
    detected JNI linker flags : -L$(JAVA_HOME)/lib/amd64/server -ljvm
    gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG -I/usr/share/jdk1.8.0_51/jre/../include -I/usr/share/jdk1.8.0_51/jre/../include/linux     -fpic  -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g  -c conftest.c -o conftest.o
    gcc -std=gnu99 -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o conftest.so conftest.o -L/usr/share/jdk1.8.0_51/jre/lib/amd64/server -ljvm -L/usr/lib/R/lib -lR
    
    The following Java variables have been exported:
    JAVA_HOME JAVA JAVAC JAVAH JAR JAVA_LIBS JAVA_CPPFLAGS JAVA_LD_LIBRARY_PATH
    Running: /bin/bash
    

    因此,我们需要在手动指定了jar,javah后再运行

    sudo R CMD javareconf
    

    在JDK路径无误的状态下,此命令会自动地进行DEBUG.并export一个环境变量 JAVA_TOOL_OPTIONS. 当所有空白被正确填补,并成功运行上述命令后,rJava包即可成功安装.


    另,此时运行 java -version会是如下状况,其中的 JAVA_TOOL_OPTIONS一行是rJava的安装所致.

    user@loca:~$ java -version
    Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar 
    java version "1.8.0_51"
    Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
    Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)
    

    具体DEBUG步骤

    配置JDK环境

    详见另一篇博文:Ubuntu 中 java 环境 (sunjdk) 的配置 (附详细说明)

    手动指定archiver, header prep.

    # 以下两条应该已经在配置JDK的时候已经运行过了
    $ sudo update-alternatives --install /usr/bin/java java /usr/share/jdk1.8.0_51/bin/java 300
    $ sudo update-alternatives --install /usr/bin/javac javac /usr/share/jdk1.8.0_51/bin/javac 300
    
    #下面这些是DEBUG所需的
    $ sudo update-alternatives --install /usr/bin/jar jar /usr/share/jdk1.8.0_51/bin/jar 300
    $ sudo update-alternatives --install /usr/bin/javah javah /usr/share/jdk1.8.0_51/bin/javah 300
    

    指定archiver (jar), header prep (javah)

    # config选项指定
    $ sudo update-alternatives --config jar 
    $ sudo update-alternatives --config javah
    

    运行sudo R CMD javareconfsudo R CMD javareconf -e

    按照R中提示运行命令(不知道具体是那个起的作用)

    $ sudo R CMD javareconf
    $ sudo R CMD javareconf -e
    

    安装rJava包

    在R中运行

    install.packages("rJava")
    

    一路直踩到底,大功告成!

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-5 15:45 , Processed in 0.061165 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表