R 之 rJava 包安装错误的解决方案
前几天在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 javareconf和sudo R CMD javareconf -e
按照R中提示运行命令(不知道具体是那个起的作用)
$ sudo R CMD javareconf
$ sudo R CMD javareconf -e
安装rJava包
在R中运行
install.packages("rJava")
一路直踩到底,大功告成!
R 之 rJava 包安装错误的解决方案的更多相关文章
- R语言rJava包安装载入及JAVA环境配置
rJava 包的安装与载入 一般文本分词的教程都会贴出: install.packages("rJava") library(rJava) 来引导我们装载rJava包,运行inst ...
- 20150514Linux下rpm包安装错误及解决方案
(1)用rpm -ivh ***.rpm解压RedHat自带boost出现错误如下: warning: /media/RHEL_6.3 i386 Disc 1/Packages/boost-1.41. ...
- R中rJava包载入时报错的问题
今天安装XLConnect包,安装后无法library(XLConnect)载入,看报错问题应该出在rJava上,找到了下面的解决办法: if (Sys.getenv("JAVA_HOME& ...
- 【转】Win7+Ubuntu12.04.1硬盘安装错误及解决方案----不错
原文网址:http://blog.csdn.net/ys_073/article/details/8310115 前言: 说起来了,为了在Win7上进行硬盘安装Ubuntu浪费了整整一个晚上的时间.装 ...
- weblogic安装错误BEA-090870解决方案
00.问题描述 <Sep 3, 2017 3:29:09 PM CST> <Error> <Security> <BEA-090870> <The ...
- linux-ubuntu 下R无法安装HH包的原因及解决方案
错误信息: configure: error: GNU MP not found, or not 4.1.4 or up, see http://gmplib.org ERROR: configura ...
- R 安装包遇到问题(一) loadNamespace()里算'rJava'时.onLoad失败了 rJava 包的安装与载入
> library(xlsx) Error: package or namespace load failed for ‘xlsx’: loadNamespace()里算'rJava'时.onL ...
- R语言:关于rJava包的安装
R语言:关于rJava包的安装 盐池里的萝卜 2014-09-14 00:53:33 在做文本挖掘的时候,会发现分词时候rJava是必须要迈过去的坎儿,所以进行了总结: 第一步:安装rJava和jd ...
- 安装python包时出现VC++ 错误的解决方案
方式一 就是按照提示在微软的官网上下载宇宙第一编辑器VS,安装完之后卸载掉就好了. 方式二 下载whl包安装 因为python有很多native的包,不是纯python代码,用了诸如c/c++的代码, ...
随机推荐
- MySQL SQL Injection(注入)
如果通过网页接收用户输入,而后再把这些数据插入到数据库中,那么你可能就会碰到 SQL 注入式攻击.本节简要介绍如何防范这种攻击,确保脚本和 MySQL 语句的安全性. 注入式攻击往往发生在要求用户输入 ...
- Linux——网络配置及命令
traceroute命令(unix)/tracert命令(windows) tracert命令的格式为:tracert [-d] [-h maximum_hops] [-j host-list] [- ...
- Entity FrameWork Code First无法生成数据库 解决办法
我是控制台应用程序,没有connectionStrings,试了几个方法也都不可以. 这是别人的博客用其他方法. http://www.cnblogs.com/Gyoung/archive/2013/ ...
- C# winform 屏蔽鼠标右键 spreadsheet Gear 屏蔽鼠标右键菜单
今天用到spreadsheetGear 插件,然后右键有插件自己的菜单.都是英文的,而且还能打开新的窗体.嵌到程序里面,不太合适,所以着手屏蔽. 刚开始用的Mouse_up,虽然能捕获事件,但是没有K ...
- Number使用笔记
Numbe函数用于将对象转换为数字 0 0 null 0 空 0 "" 0 true 1 false 0 date ...
- Linux 下的 core dump
core dump 的基本概念 当一个进程要异常终止时 ,可以选择把进程的用户空间内存数据全部保存到磁盘上 ,文件名通常是 core, 这叫做 Core Dump.通常情况下,core文件会 ...
- 深入理解JVM3
VM运行时数据区域 JVM执行Java程序的过程中,会使用到各种数据区域,这些区域有各自的用途.创建和销毁时间.根据<Java虚拟机规范(第二版)>的规定,JVM包括下列几个运行时数据区域 ...
- Oracle数据库使用总结
--1.使用月份作为条件筛选(to_char函数与extract函数使用) select * from test_date where to_char(dqsj,'mm') like '%07%'; ...
- libnetwork 源码浅析
[编者的话]从docker 1.6开始关注docker网络这块,从原来的铁板一块,到后来的libnetwork拆分,到现在的remote driver,docker 一直在改进.功能缺失,实用性不足, ...
- nrm npm源管理利器
nrm npm源管理利器 nrm是管理npm源的一个利器. 有时候我们用npm install 安装依赖时会非常的慢,是官方自身的npm本来就慢,然后我们会尝试安装淘宝的npm或者cnpm,这些安装切 ...