Я скомпилировал код C в Терминале на Mac (Mountain Lion). Пытаясь загрузить его с помощью dyn.load на ПК с Windows 7, я получил такое сообщение:

Error in inDL(x, as.logical(local), as.logical(now), ...) : 
 unable to load shared object 'C:/Users/Iris/Desktop/mcmc.so':
 LoadLibrary failure:  %1 is not a valid Win32 application.

Windows 7 - 64-битная, и R на ней тоже 64-битная. У меня не было проблем с загрузкой кода C на другом MAC. Интересно, что пошло не так с моим кодом. Спасибо.

РЕДАКТИРОВАТЬ:

Я попробовал найти решение здесь , но это не сработало.

c r
0
Alex 1 Май 2013 в 07:49
Это должно работать? Я предполагаю, что вам нужно скомпилировать его на Windows.
 – 
Matthew Lundberg
1 Май 2013 в 07:52
Да. У меня нет проблем с загрузкой и запуском на моем компьютере и на другом Mac.
 – 
Alex
1 Май 2013 в 07:53
Я имею в виду загрузку общего объекта Mac в Windows.
 – 
Matthew Lundberg
1 Май 2013 в 07:54
Ой. Я думал, что пока он скомпилирован, он должен работать на всех платформах. Простите мое незнание: - /
 – 
Alex
1 Май 2013 в 07:55

1 ответ

Лучший ответ

Mac скомпилирует код C в формат Mach-O (объект Mach). Mach-O - Википедия Это должно нормально работать на платформе Mac. Вот почему это сработало на другом Mac.

Windows использует формат PE (Portable Executable) WinPE - Википедия

Форматы несовместимы, поэтому LoadLibrary жалуется на то, что не является допустимым приложением Win32 - потому что это не так.

Перекомпилируйте код C в Windows, и он должен работать.

2
Ken Wilcox 1 Май 2013 в 08:03
Есть ли способ скомпилировать код, который можно использовать на разных платформах? - учитывая, что я не всегда знаю, что люди используют ОС.
 – 
Alex
1 Май 2013 в 08:10
Я скомпилировал только двоичные файлы для платформ и предлагаю пользователю выбрать, какой из них загрузить. Я не знаком с упомянутым пакетом @DWin. В качестве примера Oracle предлагает здесь несколько бинарных пакетов: java.com/en/download /manual.jsp
 – 
Ken Wilcox
1 Май 2013 в 08:48
1
Я не «упоминал о пакете». Я предлагал @Alex создать кроссплатформенный пакет. CRAN предлагает тысячи кроссплатформенных пакетов (многие из которых имеют двоичный код) здесь: cran.r -project.org/web/packages
 – 
IRTFM
1 Май 2013 в 10:25