У меня проблема с использованием dll Fortran в Matlab. я не мог использовать dll, созданный fortran, в matlab. Я использую инструкцию «loadlibrary» в Matlab, но ошибка связана с файлами заголовков. что такое заголовочные файлы?? пожалуйста, дайте мне больше информации, чтобы загрузить dll fortran в Matlab и вызвать его.
использование dll в матлабе
Ответы (3)
Вместо того, чтобы пытаться использовать файл dll напрямую, я предлагаю вам перестроить его, используя MEX-функциональность Matlab. Да, файл mex - это dll, и вы можете создавать библиотеки dll вне Matlab и успешно их использовать, для новичка, таким, как я думаю, вы, намного проще использовать MEX. Один из способов сделать это проще заключается в том, что если вы создаете mex-файл, система не будет запрашивать у вас заголовочный файл, что, как вы знаете, является довольно чуждым понятием для программиста на Фортране. Другой способ, с помощью которого MEX облегчит вашу жизнь, заключается в том, что вы можете затем вызывать функцию, предоставляемую dll, непосредственно из командной строки Matlab, без загрузки библиотеки.
Изучите документацию Matlab по файлам MEX, обратите особое внимание на то, как интегрировать Fortran таким образом.
Не видя вашего заголовочного файла и командной строки, которую вы используете в MATLAB, здесь трудно вам помочь. Вы можете сослаться на документацию в MATLAB, которая требует этого. вы передаете два аргумента в loadlibrary, второй из которых является заголовочным файлом с сигнатурами функций. Я предполагаю, что вы не предоставляете этот второй аргумент.
Вам необходимо предоставить заголовочный файл, определяющий каждую из именованных функций в Fortran DLL, которую вы будете вызывать. Например, если ваша 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);
Есть много других случаев, но суть в этом.