Gần đây tôi đã chuyển từ máy tính xách tay 32 bit sang màn hình 64 bit (cả win7). Tôi vừa phát hiện ra rằng tôi gặp lỗi khi tải dll bằng cách sử dụng dyn.load
. Tôi đoán đây là một sai lầm đơn giản và tôi đang nhìn cái gì đó.Sự cố khi tải mã c đã biên dịch trong R x64 bằng dyn.load
Ví dụ, tôi viết chức năng này đơn giản c (foo.c):
void foo(int *x) {*x = *x + 1;}
Sau đó biên dịch nó trong dấu nhắc lệnh:
R CMD SHLIB foo.c
Sau đó, trong 32bit RI có thể sử dụng nó trong R:
> dyn.load("foo.dll")
> .C("foo",as.integer(1))
[[1]]
[1] 2
nhưng trong 64bit RI nhận được:
> 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.
Edit:
Để tham khảo, R CMD có thể bị buộc trong một cấu trúc bằng cách sử dụng --arch 64x
:
R --arch x64 CMD SHLIB foo.c
Khá rõ ràng trên thực tế, tôi biết tôi đã thực hiện một sai lầm rooky :)
Cảm ơn. Tôi đã xây dựng này trên máy 64bit của tôi với Rtools mới nhất được cài đặt. Có lẽ nó đang xây dựng phiên bản 32bit không? –
bạn có thể kiểm tra điều này với Dependency Walker –
Sử dụng nó và thực sự foo.dll là dành cho x86. Vì vậy, làm thế nào để buộc R CMD SHLIB để làm cho dll x64? –