最近32ビットのラップトップから64ビットのデスクトップに移行しました(どちらもwin7)。私はちょうどdyn.load
を使用しているDLLを読み込んでいるとき私は今エラーを取得したことを知った。私はこれは簡単な間違いだと思うし、何かを見落としている。コマンドプロンプトでコンパイルそしてdyn.loadを使用してR x64にコンパイル済みのCコードをロードする際の問題
void foo(int *x) {*x = *x + 1;}
:
例えば、私はこの単純なC関数(foo.cの)を書き込む
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.
編集:
参考のため、R CMDは--arch 64x
を使用することによってアーキテクチャに強制することができます。
R --arch x64 CMD SHLIB foo.c
かなり明確実際に、私はrookyミスを作っていた知っていた:)
ありがとうございました。最新のRtoolsがインストールされた64ビットマシンでこれを構築しました。とにかく32bitバージョンを構築しているのかもしれませんか? –
これはDependency Walkerで確認できます –
これは実際にはfoo.dllがx86用です。それでは、R CMD SHLIBにx64 dllを強制するにはどうすればいいですか? –