初学者的 Mex 错误 - MatLab

Beginner's Mex Error - MatLab

我开始使用 mex 设置从 matlab 调用 fortran 文件。我想要做的是在 m 文件中调用 fortran 子例程。根据我的阅读,我需要 运行:

mex filename.f90

但是,当我这样做时,我收到了很多类型的错误消息:

error #5149: Illegal
character in statement label field  [s]

但是,我使用的 .f90 文件应该是正确的(我是从其他来源获得的)。以下是 fortran 文件的第一行:

subroutine mexFunction(nlhs,plhs,nrhs,prhs)
!--------------------------------------------------------------------
! Matlab gateway for sirff

 implicit none

 ! pointers to input/output data
 ! always take INTEGER*8, to let it work on 64-bit machines (SGI e.g.)
 ! 32-bit compilers will correct this to INTEGER*4, so don't worry about the
 ! warning(s) on this during compilation.
 integer(8) :: plhs(*), prhs(*)

我是初学者,请多多包涵。感谢任何帮助。

您看到的错误消息来自英特尔编译器。无论您使用的是 .f90 文件扩展名(传统上表示源是自由格式),您的 Fortran mex 文件都被视为固定格式的 Fortran。您可以使用 ifort 本身轻松重现错误:

> ifort -fixed filename.f90
filename.f90(1): error #5149: Illegal character in statement label field  [s]
subroutine mexFunction(nlhs,plhs,nrhs,prhs)
^

您说您将 filename.f90 重命名为 filename.f,但这并没有改变源格式(从自由到固定),所以错误仍然存​​在。 Wikibooks 描述了 here 如何制作固定格式的文件。一个好的经验法则是每行缩进 6 个空格并将注释 ! 符号更改为 Cs。这应该使您的 mex 调用成功。

如果您想继续使用自由格式源,您将需要修改您的 mex 选项以允许这样做。 mex 的 MathWorks(英国)参考页是 http://uk.mathworks.com/help/matlab/ref/mex.html