【问题标题】:Trying to add a Fortran compiler for Matlab尝试为 Matlab 添加 Fortran 编译器
【发布时间】:2017-06-29 13:29:05
【问题描述】:

我有一个扩展名为 .F 的文件,我想编译它以与我的 Matlab 代码一起使用。为此,我正在尝试使用 mex 工具。 "mex -setup FORTRAN -v" 返回。

mex -setup FORTRAN -v

详细模式已开启。

...正在寻找编译器“Intel Visual Fortran Composer XE 2011 with Microsoft SDK 7.1”...

...正在寻找环境变量“IFORT_COMPILER12”...否。

未找到已安装的编译器“Intel Visual Fortran Composer XE 2011 with Microsoft SDK 7.1”。

...正在寻找编译器“Intel Visual Fortran Composer XE 2011 with Microsoft Visual Studio 2008”...

...正在寻找环境变量“IFORT_COMPILER12”...否。

未找到已安装的编译器“Intel Visual Fortran Composer XE 2011 with Microsoft Visual Studio 2008”。

...正在寻找编译器“Intel Visual Fortran Composer XE 2011 with Microsoft Visual Studio 2010”...

...正在寻找环境变量“IFORT_COMPILER12”...否。

未找到已安装的编译器“Intel Visual Fortran Composer XE 2011 with Microsoft Visual Studio 2010”。

...正在寻找编译器“Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2008”...

...正在寻找环境变量“IFORT_COMPILER14”...否。

...正在寻找环境变量“IFORT_COMPILER13”...否。

未找到已安装的编译器“Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2008”。

...正在寻找编译器“带有 Microsoft Visual Studio 2010 的 Intel Visual Fortran Composer XE 2013”​​...

...正在寻找环境变量“IFORT_COMPILER14”...否。

...正在寻找环境变量“IFORT_COMPILER13”...否。

未找到已安装的编译器“Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2010”。

...正在寻找编译器“Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2012”...

...正在寻找环境变量“IFORT_COMPILER14”...否。

...正在寻找环境变量“IFORT_COMPILER13”...否。

未找到已安装的编译器“Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2012”。

使用 mex 时出错

未找到支持的编译器或 SDK。有关选项,请访问 http://www.mathworks.com/support/compilers/R2014b/win64.html.

在我看来,问题在于我没有任何默认编译器。所以我用 gfortran 编译器下载了 MGW,现在我想将它设置为 mex 编译的工具。通过互联网冲浪我还没有找到任何说明如何这样做。我很乐意就如何做到这一点或任何其他方式提出建议。

一些额外信息,供能想到替代方案的人参考。 我得到了扩展名为 .F 的文件,并且我编译了扩展名为 mexa64 的二进制文件,它代表 Linux 二进制文件。但是我需要的是mexw64,它是64位Windows的版本。

另外这是getCompilerConfigurations的输出,说明有C编译器,没有Fortran编译器

mex.getCompilerConfigurations('C')

ans =

带有属性的编译器配置:

         Name: 'Microsoft Visual C++ 2012 (C)'
 Manufacturer: 'Microsoft'
     Language: 'C'
      Version: '11.0'
     Location: 'D:\apps\visualstudio2012'
    ShortName: 'MSVC110'
     Priority: 'A'
      Details: [1x1 mex.CompilerConfigurationDetails]
   LinkerName: 'link'
LinkerVersion: ''
       MexOpt: 'C:\Users\Ian\AppData\Roaming\MathWorks\MATLAB\R2014b\mex_C_win64.xml'

mex.getCompilerConfigurations('Fortran')

ans =

0x1 带有属性的 CompilerConfiguration 数组:

Name
Manufacturer
Language
Version
Location
ShortName
Priority
Details
LinkerName
LinkerVersion
MexOpt

【问题讨论】:

  • MATLAB 有一个特定的列表,列出了哪些编译器受支持。你有他们的名单吗?
  • 我有一些 C++ 编译器,但没有 Fortran。我从 Fortran 列表中搜索了一些编译器,它们的价格似乎在 6-7 百美元左右,我还没准备好花这些钱做实验
  • 请停止添加` ,学习如何格式化。
  • 很遗憾,MATLAB 只支持一系列编译器。我非常怀疑你会让任何其他编译器工作。我的意思是,看看详细的输出,它只是在一个列表中搜索一个编译器,如果它不存在,就会出错。
  • 好像是真的。我最终在我的 Mac 上安装了 Intel Visual Fortran Composer。如果您有“.edu”电子邮件,它有一个免费版本。以防万一有人需要它

标签: matlab fortran gfortran mex


【解决方案1】:

您需要为 mingw fortran 编译器创建自己的 mexopts 设置 xml 文件。

在 /bin/mexopts 文件夹中会有一个 mingw64.xml 文件。这是支持的 mingw gcc 编译器的 mexopts 文件。在顶部的配置选项中显示Language="C"

该文件的结构在定义编译器和链接器等命令时相当清晰。因此您需要为FORTRAN编译和链接创建一个等效文件,然后您可以设置Language="FORTRAN"

创建 mexopt 文件(例如 my_mingw_Fortran.xml)后,您可以在 MATLAB 提示符下使用以下命令告诉 MATLAB mex 将此文件用于 FORTRAN

mex 设置:my_mingw_Fortran.xml FORTRAN -v

抱歉,我没有 Windows 上 mingw/gcc 的示例,但我使用此过程让 MATLAB 在 Linux 机器上使用 Intel Fortran 编译器。

【讨论】:

    【解决方案2】:

    你可以试试Gnumex tool。它用 Mingw 编译器替换了默认的 mex 文件基础结构(实际上你可以在 gnumex 和内置的 mex 处理之间来回切换)。对我来说(MATLAB 2014b)它工作得很好,我也用它来编译 Fortran 代码。我只需要显式链接 gfortran 库。它需要 mingw 的 TDM-GCC 变体。

    【讨论】:

      猜你喜欢
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多