gpt4 book ai didi

package - 构建 R 包失败,rJava LoadLibrary "not a valid win32 application"失败

转载 作者:行者123 更新时间:2023-12-02 01:14:28 26 4
gpt4 key购买 nike

我写了一个 R 包来连接 R 和 messageQueues,特别是 activeMQ 和 rabbitMQ,所以所有的源都可以在这里找到:http://r-forge.r-project.org/projects/r-message-queue/

r-forge 无法构建包,因此我在本地重新创建/调试,但我的本地构建在此过程中比 r-forge 更早失败。

我正在运行 64 位 windows7、64 位 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 上运行 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/server/jvm.dll,因为 rJava 不知何故喜欢它。

如有任何帮助,我们将不胜感激。

谢谢,

马特。

最佳答案

默认情况下,R 的检查功能将尝试针对所有相关架构测试包。在 windows7 x64 机器上,这意味着它将尝试针对 i386 和 x64 测试包。

不幸的是,当使用 x64 JDK 运行 R x64 时,它似乎无法干净地管理体系结构依赖性,因此尝试在 x64 上下文中加载 i386 DLL (/rJava/libs/i386/rJava.dll) 并失败。我不完全明白为什么,但可以解决它。

可以使用 --no-multiarch 开关强制 R CMD check messageQueue 针对当前(默认)架构运行。它记录在 Writing R Extensions manual, Section 1.3.1 (see: Multiple sub-architectures near the end) 中.

我更新的 R 命令仅检查当前架构:

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

太棒了。

关于package - 构建 R 包失败,rJava LoadLibrary "not a valid win32 application"失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13311107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com