使用dyn.load在R x64中加载编译的c代码时出现问题

我最近从一台32位笔记本电脑转到64位台式机(均为win7)。 我刚刚发现我在使用dyn.load加载dll时出现错误。 我想这是一个简单的错误,我忽视了一些事情。

例如,我写这个简单的c函数(foo.c):

 void foo( int *x) {*x = *x + 1;} 

然后在命令提示符下编译它:

 R CMD SHLIB foo.c 

然后在32位RI可以在R中使用它:

 > dyn.load("foo.dll") > .C("foo",as.integer(1)) [[1]] [1] 2 

但在64位RI获得:

 > dyn.load("foo.dll") Error in inDL(x, as.logical(local), as.logical(now), ...) : unable to load shared object 'C:/Users/Sacha/Documents/R/foo.dll': LoadLibrary failure: %1 is not a valid Win32 application. nd. 

编辑:

作为参考,可以使用--arch 64x在架构中强制使用R CMD:

 R --arch x64 CMD SHLIB foo.c 

实际上很清楚,我知道我犯了一个错误的错误:)

我的猜测是你正在将它编译成32位目标。 您需要使用64位工具在64位计算机上构建它。 您无法将32位DLL加载到64位进程中,反之亦然。

我做的是用–arch x64和–arch 32一次编译并手动将相应的.dll(同名)分别放在单独的文件夹src-x64和src-i386下,这两个文件夹在同一个文件夹下文件夹src所在的目录。