Как взаимодействовать с DLL в R? - PullRequest
4 голосов
/ 28 июня 2011

Я создал расширения DLL из Matlab.Затем я хочу прочитать эту dll в R.

Я использовал dyn.load(), но она не работает.

Можете ли вы дать мне несколько советов?

Ответы [ 3 ]

2 голосов
/ 30 июня 2011

На каком языке был написан исходный код?

Проблема заключается в смешивании компиляторов.Matlab dll, вероятно, был построен Visual Studio.И вы просто не можете смешивать код C ++ между различными компиляторами, поскольку идентификаторы функций искажаются.Вы можете, с некоторой работой, смешать объектный код C.На сайте MinGW есть несколько часто задаваемых вопросов.

1 голос
/ 28 июня 2011

Основываясь на обсуждении в ветке комментариев ниже @ ответ Марио: я собирался предложить вам попробовать сравнение, которое вы сделали (R CMD SHLIB dll против Matlab dll), чтобы помочь диагностировать проблему. Основываясь на результате, я думаю, что вам нужно выяснить, каким будет синтаксис вызова для dll в C, и написать для него небольшую оболочку C, которая использует этот синтаксис, но в свою очередь R CMD SHLIB -able ... R CMD SHLIB --help говорит, что вы можете включить опции компоновщика в командной строке (т.е. убедиться, что вы связываете dll-библиотеку, вызываемую в Matlab, с d-библиотекой, вызываемой в R), но я не уверен в точном синтаксисе Вероятно, это поможет немного изучить соответствующий раздел руководства по расширениям R.

0 голосов
/ 28 июня 2011

Необходима дополнительная информация.Обычный способ сделать это так:

dyn.load ("/ path / to / library");

Некоторые указатели:

  • убедитесь, чточто архитектура библиотеки правильная (например, «x86_64» против «i386» против «armv7»)
  • убедитесь, что вы не пытаетесь загрузить Windows «.dll» на компьютерах под управлением Unix ('.so', '.dylib')
...