2016-12-08 4 views
1

MATLABからFortranコードを呼び出す必要があります。私はいくつかの調査を行い、mexコマンドとそれをどのように使用するかについて読んだ。残念ながら私はすでにFortranコンパイラを動作させることに失敗しています。MATLAB mexがMacOSでコンパイラgfortranを探していません

まず第一に、ここに私の設定です:

  • MacOSのシエラ10.12.1(最新版)
  • MATLAB R2016b(最新版)
  • 公式から.dmgファイルを介してインストールのgfortran 4.9.2( GNUサイト)

MATLABドキュメントによると、私は、FortranからMEXファイルを構築するためのmexを準備するmex -setup FORTRANを使用することができます。しかし、冗長モードでコマンドを実行すると、以下の出力が得られますmex -setup -v FORTRAN

Verbose mode is on. 
... Looking for compiler 'Intel Fortran Composer XE' ... 
... Looking for environment variable 'IFORT_COMPILER16' ...No. 
... Looking for environment variable 'IFORT_COMPILER15' ...No. 
... Looking for environment variable 'IFORT_COMPILER14' ...No. 
... Looking for environment variable 'IFORT_COMPILER13' ...No. 
... Executing command 'which ifort' ...No. 
Did not find installed compiler 'Intel Fortran Composer XE'. 
Error using mex 
No supported compiler or SDK was found. For options, visit 
http://www.mathworks.com/support/compilers/R2016b/maci64.html. 

link次のことを、1はMATLABは、Linux上でサポートGNU gfortran 4.9.xをしていることがわかります。しかし、Macではインテルの商用コンパイラだけがサポート対象としてリストされています。それはmexも同様に探しているようだ。

Macはgfortranを使用してFortranコードをコンパイルすることができるので、MATLABで動作させることが可能だと思いました。また、私はたくさんのグーグル・グーグルで、this oneのような質問をMathWorksフォーラムで見つけました。これは、MATLABがgfortranをMacでも使用できるはずであることを示唆しています。

これは私が奇妙だと思うことです、私のMATLABはgfortranコンパイラを探していません。インテルのコンパイラを探して、見つからずに上記のエラーメッセージをスローするだけです。

私のgfortranについては、それは間違いなく4.9.2(Linuxでサポートされていると表示されています)、which gfortran/usr/local/binを返し、私はTerminal経由でプログラムをコンパイルすることができます。

ちなみに、mex -setup ANYはCとC++のコンパイラを正常に表示しますが、Fortranは正常に表示されません。

MEX configured to use 'Xcode with Clang' for C language compilation. 
Warning: The MATLAB C and Fortran API has changed to support MATLAB 
variables with more than 2^32-1 elements. In the near future 
you will be required to update your code to utilize the 
new API. You can find more information about this at: 
http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html. 
MEX configured to use 'Xcode Clang++' for C++ language compilation. 
Warning: The MATLAB C and Fortran API has changed to support MATLAB 
variables with more than 2^32-1 elements. In the near future 
you will be required to update your code to utilize the 
new API. You can find more information about this at: 
http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html. 

To choose a different C compiler, select one from the following: 
Xcode with Clang mex -setup:'/Users/Lennart/Library/Application Support/MathWorks/MATLAB/R2016b/mex_C_maci64.xml' C 
Xcode Clang++ mex -setup:'/Users/Lennart/Library/Application Support/MathWorks/MATLAB/R2016b/mex_C++_maci64.xml' 

最後の出力の最後に記載されているファイル.xmlも見ました。 Fortranと関連がないファイルはありませんでした。私は自分自身を正常に書くことができませんでした。私は...それが問題だかどうかさえわからない

だから、簡単に言えば、私の質問は:どのように私はMATLAB実際に探してもらうことができ、その後、もちろんmexファイルをコンパイルするためにそれを使用するために私のgfortranコンパイラを見つけますか?

ありがとうございました!

答えて

2

hsuyaaと提供されたリンクのおかげで、私は自分の問題を解決することができました。自分自身でもう少し実験をする必要があるので、私はgfortranをどのように働かせることができたのかを投稿したいと思います。

this linkと受け入れられた答えをご覧ください。MathWorksチームは、xCode 7.0とMATLAB R2015b用に具体的に書かれていることを明確に述べていますが、xCode 8.1、MATLAB R2016b、およびmacOS Sierra 10.12で作業するにはすべてが必要です。

MATLABは前述のように.xmlファイルにコンパイラ設定の詳細を格納しているようです。あなたは、私は、その場所の前にしかしにMATLABの位置は3つのファイルだけ、クランに1つ、クラン++、IntelのFortranのための1対1に新鮮なインストールを実行でした

cd(fullfile(matlabroot, 'bin', 'maci64', 'mexopts')); 

を入力することにより、MATLABでディレクトリを見つけることができます。 gfortranは単に欠けていた。

MathWorksのソリューション著者は、これらの.xmlファイルをすべて彼の投稿に追加しました。ファイルをダウンロードし、gfortran.xmlを上記のフォルダにコピーしました。これは、MATLABが実際にmexセットアップを実行しているときにgfortranを探すようにしたという点で部分的に成功しました。

しかし、ファイルが最新でないため、私はいくつかの行を追加しなければなりませんでした。私は設定ファイルの仕組みを正確には理解していませんが、古いmacOSバージョンを参照する行がいくつかあることに気付きました。上記のリンクの後ろにファイルgfortran.xmlをダウンロードして、次の行を追加します。

あなたは

<dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk" /> 

または

<cmdReturns name="find $$ -name MacOSX10.11.sdk" /> 

を参照してくださいどこにも

<dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk" /> 

または

を追加
<cmdReturns name="find $$ -name MacOSX10.12.sdk" /> 

macOS 10.12はSierraです。ファイルを保存してmex -setup FORTRANを実行すると、gfortranが正常に識別され、mexのFortranコンパイラとして設定されました。

-1

あなたのMATLABバージョンでは、サポートされているコンパイラを検出できません。この可能性がありますLink助けることができます。

+0

リンクには正しい解決策が含まれている可能性がありますが、その答えについても何とか説明する必要があります。多くの人が実際にこのような答えを憎んで、それらを下降させます。たとえば、http://meta.stackoverflow.com/questions/265552/when-to-flag-an-answer-as-not-an-answerを参照してください。 –

関連する問題