使用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

但是在64bit 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所在的目录。

链接地址: http://www.djcxy.com/p/4561.html

上一篇: Problem with loading compiled c code in R x64 using dyn.load

下一篇: How do I fix missing git remote details?