Ubuntu 14.04 R上安装rJava包出错问题的解决: error: unable to load shared object (rJava.so)
2017-06-20 20:28
549 查看
启动R后,在交互终端中执行 install.packages("rJava"),下载rJava包编译一会儿,报类似下面错误:
Error : .onLoad failed in loadNamespace() for 'rJava', details:
call: dyn.load(file, DLLpath = DLLpath, ...)
error: unable to load shared object '/home/hadoop/R/x86_64-pc-linux-gnu-library/3.0/rJava/libs/rJava.so':
libjvm.so: cannot open shared object file:No such file or directory
Error: loading failed
Execution halted
ERROR: loading failed
* removing ‘/home/hadoop/R/x86_64-pc-linux-gnu-library/3.0/rJava’
* restoring previous ‘/home/hadoop/R/x86_64-pc-linux-gnu-library/3.0/rJava’
起初 ls -l /home/hadoop/R/x86_64-pc-linux-gnu-library/3.0/rJava/libs/rJava.so,没有rJava.so没编译出来。
百度了一番,基本都是说$JAVA_HOME没设或设置不对,再三确认,$JAVA_HOME是对的,指向环境中的jdk1.8, 并且通过
Sys.setenv(JAVA_HOME=‘/usr/lib/jvm/jdk1.8.0_131’), 也还是不行。
继续查日志,注意到编译过程中-I引用的目录不是java_home所指向的目录,而是其它java版本的路径(本机装了多个JDK),如下:
-I/usr/lib/jvm/java-1.7.0-openjdk-amd64/jre/../include -I/usr/lib/jvm/java-1.7.0-openjdk-amd64/jre/../include/linux
看来确实是环境变量和引用路径的问题,继续改配置:
~/.bashrc中增加:
export
JRE_HOME=$JAVA_HOME/jre
export
CLASSPATH=$HIVE_HOME/lib:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
这下编译过了,rJava.so也出来了,并且是64bit的。
但是还有下面的错:libjvm.so 找不到,导致rJava 安装后加载不了,rJava包还是没通过。
libjvm.so: cannot open shared object file: No such file or directory
进$JAVA_HOME路径中搜libjvm.so,确实是存在的,还是环境变量的问题? 继续百度和尝试,终于下面方面试通了,还有个变量要设:
export
LD_LIBRARY_PATH=$JRE_HOME/lib/amd64/server:$JRE_HOME/lib/amd64/
好事多磨,终于看到了可爱的提示:
installing via 'install.libs.R' to /home/hadoop/R/x86_64-pc-linux-gnu-library/3.0/rJava
** R
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (rJava)
The downloaded source packages are in
‘/tmp/RtmpOkzZDC/downloaded_packages’
>
回顾整个过程,总结起来有两点:
1.各种问题和错误都有其原因,一定要有耐心,总能把它找出来并解决掉。
2.配置中的问题与环境相关性较大,最终发现两个问题都是环境和环境变量设置的问题。回想以前环境JAVA配置过程中好像从来没expo过这么多变量,这次可能与本地安装了多个JDK版本有关吧。
后记:命令行中输入可查看R环境中JAVA相关的设置,如下:
$ sudo R CMD javareconf
Java interpreter : /usr/bin/java
Java version : 1.8.0_131
Java home path : /usr/lib/jvm/jdk1.8.0_131/jre
Java compiler : /usr/bin/javac
Java headers gen.: /usr/bin/javah
Java archive tool: /usr/bin/jar
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/lib/jvm/jdk1.8.0_131/jre/../include -I/usr/lib/jvm/jdk1.8.0_131/jre/../include/linux -fpic -O3 -pipe -g -c conftest.c -o conftest.o
gcc -std=gnu99 -shared -o conftest.so conftest.o -L/usr/lib/jvm/jdk1.8.0_131/jre/lib/amd64/server -ljvm -L/usr/lib/R/lib -lR
JAVA_HOME : /usr/lib/jvm/jdk1.8.0_131/jre
Java library path: $(JAVA_HOME)/lib/amd64/server
JNI cpp flags : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/linux
JNI linker flags : -L$(JAVA_HOME)/lib/amd64/server -ljvm
Updating Java configuration in /usr/lib/R
Done.
Error : .onLoad failed in loadNamespace() for 'rJava', details:
call: dyn.load(file, DLLpath = DLLpath, ...)
error: unable to load shared object '/home/hadoop/R/x86_64-pc-linux-gnu-library/3.0/rJava/libs/rJava.so':
libjvm.so: cannot open shared object file:No such file or directory
Error: loading failed
Execution halted
ERROR: loading failed
* removing ‘/home/hadoop/R/x86_64-pc-linux-gnu-library/3.0/rJava’
* restoring previous ‘/home/hadoop/R/x86_64-pc-linux-gnu-library/3.0/rJava’
起初 ls -l /home/hadoop/R/x86_64-pc-linux-gnu-library/3.0/rJava/libs/rJava.so,没有rJava.so没编译出来。
百度了一番,基本都是说$JAVA_HOME没设或设置不对,再三确认,$JAVA_HOME是对的,指向环境中的jdk1.8, 并且通过
Sys.setenv(JAVA_HOME=‘/usr/lib/jvm/jdk1.8.0_131’), 也还是不行。
继续查日志,注意到编译过程中-I引用的目录不是java_home所指向的目录,而是其它java版本的路径(本机装了多个JDK),如下:
-I/usr/lib/jvm/java-1.7.0-openjdk-amd64/jre/../include -I/usr/lib/jvm/java-1.7.0-openjdk-amd64/jre/../include/linux
看来确实是环境变量和引用路径的问题,继续改配置:
~/.bashrc中增加:
export
JRE_HOME=$JAVA_HOME/jre
export
CLASSPATH=$HIVE_HOME/lib:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
这下编译过了,rJava.so也出来了,并且是64bit的。
但是还有下面的错:libjvm.so 找不到,导致rJava 安装后加载不了,rJava包还是没通过。
libjvm.so: cannot open shared object file: No such file or directory
进$JAVA_HOME路径中搜libjvm.so,确实是存在的,还是环境变量的问题? 继续百度和尝试,终于下面方面试通了,还有个变量要设:
export
LD_LIBRARY_PATH=$JRE_HOME/lib/amd64/server:$JRE_HOME/lib/amd64/
好事多磨,终于看到了可爱的提示:
installing via 'install.libs.R' to /home/hadoop/R/x86_64-pc-linux-gnu-library/3.0/rJava
** R
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (rJava)
The downloaded source packages are in
‘/tmp/RtmpOkzZDC/downloaded_packages’
>
回顾整个过程,总结起来有两点:
1.各种问题和错误都有其原因,一定要有耐心,总能把它找出来并解决掉。
2.配置中的问题与环境相关性较大,最终发现两个问题都是环境和环境变量设置的问题。回想以前环境JAVA配置过程中好像从来没expo过这么多变量,这次可能与本地安装了多个JDK版本有关吧。
后记:命令行中输入可查看R环境中JAVA相关的设置,如下:
$ sudo R CMD javareconf
Java interpreter : /usr/bin/java
Java version : 1.8.0_131
Java home path : /usr/lib/jvm/jdk1.8.0_131/jre
Java compiler : /usr/bin/javac
Java headers gen.: /usr/bin/javah
Java archive tool: /usr/bin/jar
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/lib/jvm/jdk1.8.0_131/jre/../include -I/usr/lib/jvm/jdk1.8.0_131/jre/../include/linux -fpic -O3 -pipe -g -c conftest.c -o conftest.o
gcc -std=gnu99 -shared -o conftest.so conftest.o -L/usr/lib/jvm/jdk1.8.0_131/jre/lib/amd64/server -ljvm -L/usr/lib/R/lib -lR
JAVA_HOME : /usr/lib/jvm/jdk1.8.0_131/jre
Java library path: $(JAVA_HOME)/lib/amd64/server
JNI cpp flags : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/linux
JNI linker flags : -L$(JAVA_HOME)/lib/amd64/server -ljvm
Updating Java configuration in /usr/lib/R
Done.
相关文章推荐
- Ubuntu16.04下Yaafe安装问题-OSError:cannot open shared object file(libyaafe-python.so)
- ubuntu14.04 刚安装完成后汉语拼音输入法出错问题的解决办法
- 解决Ubuntu安装ftp服务出现的 Unable to locate package vsftpd问题(绝对有用!!!)
- 【已解决】Scrapy安装出错:error: Unable to find vcvarsall.bat的解决方法
- 安装Adobe Flash CS5出错的解决办法(Exit Code: 7 ERROR: Unable to get root from inChildPath)
- fatal error: malformed or corrupted AST file: 'Unable to load module Darwin.pcm 问题解决
- 解决问题:安装ubuntu时出现 (initramfs)unable to find a medium containing a live file
- ubuntu安装android studio时出错unable to run mksdcard sdk tool的解决方法
- linux环境_rpy2加载R包出错_‘unable to load shared object ’
- fatal error: malformed or corrupted AST file: 'Unable to load module Darwin.pcm 问题解决
- 2.Samba安装问题:error while loading shared libraries: libXXX.so.X: cannot open shared object file
- 解决Failed to load module "pk-gtk-module": libpk-gtk-module.so: cannot open shared object file: No such file or directory
- Scrapy安装出错:error: Unable to find vcvarsall.bat的解决方法
- 解决ubuntu 14.04 下eclipse 3.7.2 不能启动,报Could not detect registered XULRunner to use 或 org.eclipse.swt.SWTError: XPCOM 等问题的处理
- 解决Ubuntu下genymotion出现"Unable to load VirtualBox engine"问题
- Mosquitto-Ubuntu 14.04快速安装问题解决
- 搭建Ubuntu环境中的Error [dpkg 被中断,您必须手工运行 sudo dpkg --configure -a 解决此问题][安装Flashplayer出错 ]
- Ubuntu 7.10安装mplayer出现failed to load: drvc.so错误的解决办法
- 安装Adobe Flash CS5出错的解决办法(Exit Code: 7 ERROR: Unable to get root from inChildPath)
- Failed to load libGL.so error libGL.so: cannot open shared object file: No such file or directory