2010-02-17 4 views
1

У меня проблема с использованием dll fortran в matlab. Я не мог использовать dll, построенную fortran, в matlab. Я использую инструкцию loadlibrary в matlab, но ошибка связана с файлами заголовков. Что такое файлы заголовков? , пожалуйста, дайте мне больше информации, чтобы загрузить dll fortran в matlab и вызвать его.Использование dll в matlab

ответ

1

Не видя своего заголовочного файла и командную строку, которую вы используете в MATLAB, вам здесь очень сложно помочь. Вы можете reference the documentation in MATLAB which request that you pass two arguments to loadlibrary, второй - файл заголовка с сигнатурами функций. Я предполагаю, что вы не предоставляете этот второй аргумент.

4

Вместо того, чтобы пытаться напрямую использовать DLL-файл, я предлагаю вам перестроить его с помощью функции MEX Matlab. Да, файл mex - это dll, и вы можете создавать DLL за пределами Matlab и использовать их успешно, для новичков, таких как, я полагаю, вам нужно использовать MEX. Один из способов облегчения заключается в том, что если вы создадите файл mex, система не будет запрашивать у вас заголовочный файл, который, как вы знаете, представляет собой довольно чуждое понятие для программиста Fortran. Другой способ, с помощью которого MEX облегчит вашу жизнь, - это то, что вы можете затем вызвать функцию, открытую dll непосредственно из командной строки Matlab, без loadlibrary.

Изучите документацию Matlab по файлам MEX, обратите особое внимание на то, как интегрировать Fortran таким образом.

1

Вам необходимо предоставить файл заголовка, который определяет каждую из названных функций в DLL Fortran, которую вы будете называть. Например, если ваша DLL содержит функцию с именем sum, который суммирует два двойной точности переменных, таких как:

function sum(a,b) result(sum) 
    real(kind=2), intent(in) :: a, b 
    real(kind=2) :: sum 
    sum = a + b 
end function 

Тогда ваш заголовок должен будет содержать что-то вроде:

double sum(double*a, double*b); 

Но не забудьте украсьте это с помощью имени, специфичного для вашего компилятора Fortran. Например, если sum был в модуле с именем foo, и вы собрали с gfortran, то вам нужно что-то вроде:

double __foo_MOD_sum(double*a, double*b); 

Есть много других случаев, но это суть его.

Смежные вопросы