首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安装软件包时,.onLoad在'rJava‘的loadNamespace()中失败

安装软件包时,.onLoad在'rJava‘的loadNamespace()中失败
EN

Stack Overflow用户
提问于 2015-04-29 19:02:54
回答 5查看 10.3K关注 0票数 17

我有一个导入rJava的包"javaOnLoadFailed“(这只是一个用于测试我的问题的最小包,因此有个奇怪的名字)。当我尝试检查()或安装()包时,我得到了'rJava‘错误,尽管require(rJava)本身工作得很好。

install()给出以下错误:

代码语言:javascript
运行
复制
> install()
Installing javaOnloadFailed
"C:/Program Files/R/R-3.2.0/bin/x64/R" --no-site-file --no-environ --no-save  \
--no-restore CMD INSTALL  \
"C:/Projects/stackoverflow/javaOnloadFailed/javaOnLoadFailed"  \
--library="C:/Users/adb2018/Documents/R/win-library/3.2" --with-keep.source  \
--install-tests 

* installing *source* package 'javaOnloadFailed' ...
** R
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
*** arch - i386
Error : .onLoad failed in loadNamespace() for 'rJava', details:
  call: inDL(x, as.logical(local), as.logical(now), ...)
  error: unable to load shared object 'C:/Users/adb2018/Documents/R/win-library/3.2/rJava/libs/i386/rJava.dll':
  LoadLibrary failure:  %1 is not a valid Win32 application.

Error: loading failed
Execution halted
*** arch - x64
ERROR: loading failed for 'i386'
* removing 'C:/Users/adb2018/Documents/R/win-library/3.2/javaOnloadFailed'
Error: Command failed (1)

我使用的是Architect中的R 3.2.0,带有sessionInfo():

代码语言:javascript
运行
复制
R version 3.2.0 (2015-04-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] devtools_1.7.0.9000 rj_2.0.3-2         

loaded via a namespace (and not attached):
[1] tools_3.2.0   rj.gd_2.0.0-1
EN

回答 5

Stack Overflow用户

发布于 2015-04-29 19:17:05

Java环境变量为空

代码语言:javascript
运行
复制
> Sys.getenv('JAVA')
[1] ""

基于suggestion,我尝试将JAVA环境变量设置为指向64位版本的Java (因为我运行的是R64位,正如您从sessionInfo中看到的,但这不起作用:

代码语言:javascript
运行
复制
> Sys.setenv(JAVA_HOME='C:\\Program Files\\Java\\jre1.8.0_45')
> install()
Installing javaOnloadFailed
"C:/Program Files/R/R-3.2.0/bin/x64/R" --no-site-file --no-environ --no-save  \
  --no-restore CMD INSTALL  \
  "C:/Projects/stackoverflow/javaOnloadFailed/javaOnLoadFailed"  \
  --library="C:/Users/adb2018/Documents/R/win-library/3.2" --with-keep.source  \
  --install-tests 

* installing *source* package 'javaOnloadFailed' ...
** R
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
*** arch - i386
Error : .onLoad failed in loadNamespace() for 'rJava', details:
  call: inDL(x, as.logical(local), as.logical(now), ...)
  error: unable to load shared object 'C:/Users/adb2018/Documents/R/win-library/3.2/rJava/libs/i386/rJava.dll':
  LoadLibrary failure:  %1 is not a valid Win32 application.

Error: loading failed
Execution halted
*** arch - x64
ERROR: loading failed for 'i386'
* removing 'C:/Users/adb2018/Documents/R/win-library/3.2/javaOnloadFailed'
Error: Command failed (1)

然后,我尝试设置JAVA环境变量,使其指向我系统上的32位版本的Java,然后它就可以工作了!

代码语言:javascript
运行
复制
> Sys.setenv(JAVA_HOME='C:\\Program Files (x86)\\Java\\jre1.8.0_45\\')
> install()
Installing javaOnloadFailed
"C:/Program Files/R/R-3.2.0/bin/x64/R" --no-site-file --no-environ --no-save  \
  --no-restore CMD INSTALL  \
  "C:/Projects/stackoverflow/javaOnloadFailed/javaOnLoadFailed"  \
  --library="C:/Users/adb2018/Documents/R/win-library/3.2" --with-keep.source  \
  --install-tests 

* installing *source* package 'javaOnloadFailed' ...
** R
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
*** arch - i386
*** arch - x64
* DONE (javaOnloadFailed)

[INFO] Updating the R environment index started...

[INFO] The R environment index was updated successfully.

我不太理解为什么我需要使用Java32位来使R64位工作,但这似乎就是事实。

顺便说一句,不要偶然发现我的包名为"javaOnLoadFailed“。我刚刚用这个名字创建了一个最小的包来测试这个问题。

票数 24
EN

Stack Overflow用户

发布于 2016-07-07 05:39:15

许多软件包安装失败,因为它们不打算在i386平台上运行,但标准安装过程会尝试这样做。用户在jvm.dll、PATH和JAVA_HOME上浪费了大量时间,而真正的修复方法是迫使已安装的用户忘记i386。对install.packages使用选项。(当使用drat库时,也可以这样做。(功劳归Dason所有)

代码语言:javascript
运行
复制
install.packages("SqlRender",INSTALL_opts="--no-multiarch")
票数 3
EN

Stack Overflow用户

发布于 2018-12-17 10:10:17

当我尝试安装一个仅在Github中可用的包时,我发现了同样的问题。

这为我解决了问题:

代码语言:javascript
运行
复制
devtools::install_github("snowflakedb/dplyr-snowflakedb", INSTALL_opts=c("--no-multiarch"))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29941797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档