从 Intel Fortran 调用 Matlab (Linux)

Call Matlab from Intel Fortran (Linux)

我正在尝试将我编写的 Matlab 程序集成到一些 Fortran 代码中。我试着按照示例 Mathworks provides。但是我无法编译它,因为我找不到它请求的头文件。

有谁知道有人使用 Intel 编译器让它在 Linux 上工作的例子。我认为这可能是问题的一部分,因为 Matlab 仅在 Linux.

上支持 GNU Fortran

我意识到这是一个简单的问题,我只是不明白如何在编译时做任何比包含具有定义路径的多个文件更复杂的事情。

免责声明: 我目前正在使用 OS X,所以我只能提供来自 OS X 的输出,但一切都应该很容易转移到 Linux 由于 Unix 基础。我在 OS X 上也没有英特尔 Fortran 编译器(只有 C/C++ 编译器)。


注意:您需要根据您的 MATLAB 安装目录将我使用的路径替换为您系统上的正确路径。


这个问题不是英特尔编译器特有的,我也收到了 GCC Fortran 编译器的错误。

$ gfortran fengdemo.F 
fengdemo.F:1:0:

 #include "fintrf.h"
 ^
Fatal Error: fintrf.h: No such file or directory
compilation terminated.

您可以使用 Unix locate 命令来查找文件。

$ locate fintrf.h
/Applications/Matlab R2014a.app/extern/include/fintrf.h

fengdemo.F 所在的目录中,我们可以使用 -I 选项传递正确的目录

-I../../include/

但是,这会产生链接错误,因为我们没有指定可以在何处找到 fintrf.h 的库。我们可以使用 -L 选项来做到这一点(您需要将 maci64 替换为 Linux 的正确选项——我想不起来了,但您应该是可以在 bin 目录中看到它)

-L../../../bin/maci64/

现在我们需要告诉它 -leng -lmx 使用哪些库,所以完成的命令是

$ ifort fengdemo.F -I../../include/ -L../../../bin/maci64/ -leng -lmx

它应该可以正确编译。

我们还没有完成,因为它不会执行。我们需要正确设置 PATHDYLD_LIBRARY_PATH 环境变量。具体来说,我们需要将我们 MATLAB 安装的 binbin/maci64 目录添加到 PATH

$ export PATH=$PATH:/Applications/Matlab\ R2014a.app/bin/maci64:/Applications/Matlab\ R2014a.app/bin

bin/maci64/sys/os/maci64/DYLD_LIBRARY_PATH

$ export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Applications/Matlab\ R2014a.app/bin/maci64/:/Applications/Matlab\ R2014a.app/sys/os/maci64/

注:上LinuxDYLD_LIBRARY_PATH应该是LD_LIBRARY_PATH。感谢 Vladimir F 指正。

现在您可以使用

执行程序
$ ./a.out