我正在尝试将我编写的一个Matlab程序集成到一些Fortran代码中。 我试图按照Mathworks 提供的示例进行操作。 但我无法得到它编译,因为我找不到它所请求的头文件。
有没有人知道有人使用英特尔编译器在Linux上工作的例子。 我认为这可能是问题的一部分,因为Matlab只支持Linux上的GNU Fortran。
我意识到这是一个简单的问题,我只是不明白如何编译比包含多个定义path的文件更复杂的任何事情。
免责声明:我目前使用OS X,所以我只能提供OS X的输出,但是由于Unix的基础,所有的东西都可以轻松地转移到Linux上。 我也没有OS X上的Intel 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
库的fintrf.h
。 我们可以用-L
选项来做到这一点(你将需要用正确的选项替换maci64
– 我不记得它的头顶,但你应该能够在bin
目录中看到它)
-L../../../bin/maci64/
现在我们需要告诉它什么库使用-leng -lmx
,所以完成的命令是
$ ifort fengdemo.F -I../../include/ -L../../../bin/maci64/ -leng -lmx
它应该正确编译。
我们还没有完成,因为它不会执行。 我们需要正确设置我们的PATH
和DYLD_LIBRARY_PATH
环境变量。 具体而言,我们需要将MATLAB安装的bin
和bin/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/
注意:在Linux上, DYLD_LIBRARY_PATH
应该是LD_LIBRARY_PATH
。 感谢弗拉基米尔F纠正我。
现在你可以使用执行程序
$ ./a.out