生成 R 包失败,并伴有 rJava 加载库"not a valid win32 application"失败



我编写了一个R软件包将R与Messagequeues(特别是ActiveMQ和RabbitMQ连接),因此可以在此处找到所有源:http://r-forge.r-project.org/项目/r-message-quesue/

r-forge无法构建包裹,所以我正在本地重新创建/调试,但是我的本地构建在此过程中比R-forge更早。

我正在运行64位Windows7,64Bit R v2.15.2。
如果我以错误的方式进行操作,请告诉我。

构建R软件包

$ R --verbose CMD build messageQueue
* checking for file 'messageQueue/DESCRIPTION' ... OK
* preparing 'messageQueue':
* checking DESCRIPTION meta-information ... OK
* checking for LF line-endings in source and make files
* checking for empty or unneeded directories
* building 'messageQueue_0.1.tar.gz'
cygwin warning:
  MS-DOS style path detected: C:/Users/msm336/workspace_r/messageQueue_0.1.tar.gz
  Preferred POSIX equivalent is: /cygdrive/c/Users/msm336/workspace_r/messageQueue_0.1.tar.gz
  CYGWIN environment variable option "nodosfilewarning" turns off this warning.
  Consult the user's guide for more details about POSIX paths:
    http://cygwin.com/cygwin-ug-net/using.html#using-pathnames

检查R软件包

$ R --verbose CMD check messageQueue_0.1.tar.gz
* using log directory 'C:/Users/msm336/workspace_r/messageQueue.Rcheck'
* using R version 2.15.2 (2012-10-26)
* using platform: x86_64-w64-mingw32 (64-bit)
* using session charset: ISO8859-1
* checking for file 'messageQueue/DESCRIPTION' ... OK
* checking extension type ... Package
* this is package 'messageQueue' version '0.1'
* checking package namespace information ... OK
* checking package dependencies ... OK
* checking if this is a source package ... OK
* checking if there is a namespace ... OK
* checking for executable files ... OK
* checking whether package 'messageQueue' can be installed ... ERROR
Installation failed.
See 'C:/Users/msm336/workspace_r/messageQueue.Rcheck/00install.out' for details.

MessageQueue.Rcheck/00install.out

的内容
* installing *source* package 'messageQueue' ...
** R
** inst
** 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:/Program Files/R/R-2.15.2/library/rJava/libs/i386/rJava.dll':
  LoadLibrary failure:  %1 is not a valid Win32 application.
Error : package 'rJava' could not be loaded
Error: loading failed
Execution halted
*** arch - x64
ERROR: loading failed for 'i386'
* removing 'C:/Users/msm336/workspace_r/messageQueue.Rcheck/messageQueue'

我不确定为什么要使用64位版本的Java上的Windows7 X64在Windows7 X64上运行X64 R时,为什么要加载I386版本的RJAVA:

$ java -version
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b22)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)

我还在我的路径上找到了java_home/jre/bin/bin/jvm.dll,因为rjava喜欢以某种方式。

任何帮助将不胜感激。

谢谢,

马特。

默认情况下,R的检查功能将尝试针对所有相关架构进行测试。在Windows7 X64计算机上,这意味着它将尝试使用I386和X64进行测试。

不幸的是,当使用X64 JDK运行R X64时,它似乎并未干净地管理架构依赖关系,因此试图在X64上下文和失败的情况下加载I386 DLL(/rjava/libs/i386/rjava.dll)。我不完全理解为什么,但可以解决。

强迫 r CMD检查MessageQueue 可以使用> - NO-Multiarch switch来实现当前(默认)体系结构。它在写作中记录了R扩展手册,第1.3.1节(请参阅:末尾附近的多个子构造)。

我更新的r命令仅对当前体系结构进行检查:

R --verbose CMD check --no-multiarch messageQueue_0.1.tar.gz

真棒。

最新更新