如何在matlab中使用使用c头文件和fortran库的fortran源代码实现?

时间:2013-12-09 02:59:34

标签: c matlab fortran shared-libraries mex

我有一个主要的Fortran代码,它使用C头文件和Fortran库,编译后的代码需要一些dll文件在同一个目录中。我无法访问Fortran库的源代码。我想在Matlab中实现它。我试图了解这是否可行以及实现这一目标需要采取哪些步骤。我有下面的问题,如果我正朝着正确的方向前进,请告诉我。谢谢!

  1. 在Matlab中使用MEX文件界面。
  2. 使用mex -setup和Fortran编译器编译主要的Fortran代码。
  3. 使用mex -setup和Fortran编译器一起使用Fortran库?我可以将Fortran库与mex一起使用吗?我没有源代码。
  4. 如何处理C头文件?我是否使用mex -setup和C ++编译器来使用它们? 显然,我知道Visual Studio 10 SDK 7.1和M​​atalb 2012中的mex -setup存在问题。
  5. 谢谢!

1 个答案:

答案 0 :(得分:1)

关于使用可能导致mex -setup失败的Windows SDK 7.1 there is a bug of which I am aware,但它与SDK而不是MATLAB有关。应用this fix from Microsoft后,mex -setup将成功。

如果FORTRAN包含mexFunction entry point,那么使用您拥有的标题链接C库,构建MEX文件(使用FORTRAN编译器)应该没有问题。但是,如果没有mexFunction,你可能需要写一个mexFunction。请注意,尽管FORTRAN有各种编译器+链接器配置,您可以使用fLangCompilers = mex.getCompilerConfigurations('Fortran','Supported')列出,但链接器与Visual Studio或Windows SDK的link.exe相同,与C和C ++ MEX配置一起使用。因此,据我所知,您可以使用FORTRAN代码构建MEX函数并通过简单地将其添加到mex命令与任何其他库(例如{{ {1}})。对于FORTRAN MEX示例:

mex -v -largeArrayDims mexFun.F CLib.lib

基本上,我的猜测是以下应该有效:

  1. 确保您已使用上面链接的修补程序修补了Windows SDK。
  2. 运行edit([matlabroot '/extern/examples/mex/mexlockf.F']); 并选择带有SDK链接器的Intel FORTRAN编译器。
  3. 在FORTRAN中写入您的MEX文件(例如mexFun.F),包括FORTRAN库的标头,并调用标头中声明的任何FORTRAN函数。或者尝试将FORTRAN代码构建到一个单独的库中,该库从C mexFunction引用它。
  4. 使用mex -setup
  5. 构建

    值得一试〜