2012-11-09 48 views
1

我寫的R包連接與messageQueues,具體的ActiveMQ和RabbitMQ的R,所以所有的源可以在這裏找到:http://r-forge.r-project.org/projects/r-message-queue/構建[R包rJava調用LoadLibrary失敗「不是有效的Win32應用程序」失敗

R-僞造無法構建包,所以我在本地重新創建/調試,但是我的本地構建在此過程中比r-forge更早失敗。

我正在運行64位Windows7,64位R v2.15.2。
如果我以錯誤的方式回答這個問題,請告訴我。

BUILDING將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 

CHECKING將R包messageQueue.Rcheck的

$ 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. 

CONTENTS/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版本,當我在64位的Windows7使用Java的64位版本上運行64位R:

$ 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喜歡那個。

任何幫助將不勝感激。

謝謝,

馬特。

回答

5

默認情況下,R的檢查函數將嘗試針對所有相關體系結構測試軟件包。在Windows7 x64機器上,這意味着它會嘗試對i386和x64進行測試。

不幸的是,當使用x64 JDK運行R x64時,它似乎沒有乾淨地管理架構依賴關係,因此嘗試在x64上下文中加載i386 DLL(/rJava/libs/i386/rJava.dll)並失敗。我不完全明白爲什麼,但可以解決它。

強制řCMD檢查消息隊列到逆水(默認)架構上運行可以使用--no-multiarch開關來完成。它記錄在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 

真棒。

+0

你是怎麼解決這個問題的,我在安裝rJava時遇到同樣的問題,我在64位win-7系統上,64位R,運行CMD檢查命令給出 - 檢查包'rJava'是否可以安裝... ERROR 。謝謝 – bigData

+0

你有沒有嘗試在檢查命令中添加'--no-multiarch'標誌? –

相關問題