MATLAB2015​aでMinGWのgf​ortranを使いた​いのですがうまくいき​ません. CとC++は正常にビルドできるのですが, FORTRANについ​てはエラーが出ます.​どうすればいいでしょ​うか?

5 views (last 30 days)
Hashida Yoshimasa
Hashida Yoshimasa on 25 Apr 2015
Edited: Norihiro Kobayashi on 4 Jan 2017
MATLAB2015aでMinGWのgfortranを使いたいのですがうまくいきません. CとC++は正常にビルドできるのですが, FORTRANについてはエラーが出ます.
MinGWのビルドに関する設定を施しているオプションファイルは添付してあります.
ビルドするファイルは
で示されている「timestwo.F」です. 以下の手順でビルドしました.
(FORTRANのコンパイラの設定, testuserはユーザ名)
>> mex -setup:C:\Users\testuser\AppData\Roaming\MathWorks\MATLAB\R2015a\mex_FORTRAN_mingw-w64.xml FORTRAN
(mexファイルのビルド)
>> mex timestwo.F -largeArrayDims -v
エラー内容は以下のとおりです.
エラー: mex
C:\Users\testuser\AppData\Local\Temp\mex_370349256447315_4688\timestwo.obj:timestwo.F:(.text+0x41): undefined reference to `mexerrmsgidandtxt_'
C:\Users\testuser\AppData\Local\Temp\mex_370349256447315_4688\timestwo.obj:timestwo.F:(.text+0x49): undefined reference to `mxisnumeric_'
C:\Users\testuser\AppData\Local\Temp\mex_370349256447315_4688\timestwo.obj:timestwo.F:(.text+0x6c): undefined reference to `mexerrmsgidandtxt_'
C:\Users\testuser\AppData\Local\Temp\mex_370349256447315_4688\timestwo.obj:timestwo.F:(.text+0x74): undefined reference to `mxgetm730_'
C:\Users\testuser\AppData\Local\Temp\mex_370349256447315_4688\timestwo.obj:timestwo.F:(.text+0x80): undefined reference to `mxgetn730_'
C:\Users\testuser\AppData\Local\Temp\mex_370349256447315_4688\timestwo.obj:timestwo.F:(.text+0x9a): undefined reference to `mxgetpr_'
C:\Users\testuser\AppData\Local\Temp\mex_370349256447315_4688\timestwo.obj:timestwo.F:(.text+0xb0): undefined reference to `mxcopyptrtoreal8730_'
C:\Users\testuser\AppData\Local\Temp\mex_370349256447315_4688\timestwo.obj:timestwo.F:(.text+0xc6): undefined reference to `mxcreatedoublematrix730_'
C:\Users\testuser\AppData\Local\Temp\mex_370349256447315_4688\timestwo.obj:timestwo.F:(.text+0xd0): undefined reference to `mxgetpr_'
C:\Users\testuser\AppData\Local\Temp\mex_370349256447315_4688\timestwo.obj:timestwo.F:(.text+0xf6): undefined reference to `mxcopyreal8toptr730_'
C:\Users\testuser\AppData\Local\Temp\mex_370349256447315_4688\timestwo.obj:timestwo.F:(.text+0x126): undefined reference to `mexerrmsgidandtxt_'
collect2.exe: error: ld returned 1 exit status
冒頭でも書きましたが, FORTRANのみうまくビルドされません. 関数を見つけられないエラーだということはもちろんわかっています. しかしながら, これらの関数が含まれているライブラリはリンクオプションで設定しています. また, アンダースコアの問題と考え, コンパイラのオプションに -fno-underscoring を付け足しましたが, 同じようなエラーが出ます.
できるかぎりネットで調べましたが, どうしても答えを見つけられそうにありません... よろしければ, この問題についてヒントだけでも教えてもらえないでしょうか.

Answers (1)

Norihiro Kobayashi
Norihiro Kobayashi on 4 Jan 2017
Edited: Norihiro Kobayashi on 4 Jan 2017
しばらく経過してしまったようですが、以下のチェックをもしよろしければご検討下さい。
すでにアンダースコアのオプションも検討されていたようですが、no underscoreのオプションがどのように働いているのかが若干気になります。
(通常FortranではCとことなり、アンダースコアが二つつくということはドキュメントのどこかで確認したことがありますが。直接的な原因かどうかは私も理解しておりません)
VisualStudioをお持ちでしたら、コンパイル後のオブジェクトファイルに対してdumpbinを使って解析を試みることも有効かも知れません。
以上ご参考になれば幸いです。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!