Проблема с загрузкой скомпилированного кода C в R x64 с использованием dyn.load - PullRequest
7 голосов
/ 07 февраля 2011

Я недавно перешел с 32-битного ноутбука на 64-битный рабочий стол (оба win7). Я только что узнал, что я получаю ошибку сейчас при загрузке DLL, используя dyn.load. Я думаю, это простая ошибка, и я что-то упускаю.

Например, я пишу эту простую функцию c (foo.c):

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

Затем скомпилируйте его в командной строке:

R CMD SHLIB foo.c

Тогда в 32-битном R я могу использовать его в R:

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

но в 64-битном R я получаю:

> 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:

Для справки, R CMD может быть принудительно установлен в архитектуре с помощью --arch 64x:

R --arch x64 CMD SHLIB foo.c

Совершенно ясно, на самом деле, я знал, что совершил грубую ошибку:)

Ответы [ 2 ]

4 голосов
/ 07 февраля 2011

Я предполагаю, что вы компилируете его в 32-битную цель. Вам нужно собрать его на 64-битной машине с 64-битными инструментами. Вы не можете загрузить 32-битную DLL в 64-битный процесс, и наоборот.

0 голосов
/ 16 марта 2012

что я сделал, это скомпилировал с --arch x64 и --arch 32 один раз и вручную поместил соответствующий .dll (с тем же именем) в отдельные папки src-x64 и src-i386 соответственно, эти две папкив том же каталоге, где находится папка src.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...