Сбой пакета сборки R с ошибкой "недопустимым приложением win32" rJava LoadLibrary
Я написал пакет 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'
Я не уверен, почему он пытается загрузить версию rJava для i386, когда я запускаю x64 R на Windows7 x64, используя 64-битную версию java:
$ 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 это как-то нравится.
Любая помощь будет принята с благодарностью.
Спасибо,
Мэтт.
1 ответ
По умолчанию функция проверки R попытается проверить пакет на соответствие всем соответствующим архитектурам. На компьютере с Windows7 x64 это означает, что он попытается протестировать пакет как на i386, так и на x64.
К сожалению, при запуске R x64 с x64 JDK кажется, что он не управляет архитектурными зависимостями чисто, поэтому пытается загрузить библиотеку i386 (/rJava/libs/i386/rJava.dll) в контексте x64 и завершается неудачно. Я не до конца понимаю почему, но могу обойти это.
Принудительное выполнение проверки CMD RQueue для текущей (по умолчанию) архитектуры может быть выполнено с помощью ключа --no-multiarch. Это задокументировано в руководстве по написанию расширений R, раздел 1.3.1 (см.: Несколько суб-архитектур ближе к концу).
Моя обновленная команда R проверяет только текущую архитектуру:
R --verbose CMD check --no-multiarch messageQueue_0.1.tar.gz
Потрясающие.