MEXコマンド実行時にerror LNK2019が発生してしまう.

8 views (last 30 days)
N.Y.
N.Y. on 15 May 2024
Answered: N.Y. on 19 Jun 2024
S-functionを使用して既存のFortranサブルーチンをSimulinkに組み込もうとしているのですが,
mexコマンドで,fortranの.objファイルとCのゲートウェイ関数から.mexw64ファイルを作成する際に,以下のようなエラーが出てしまいます.
次を使用中のエラー: mex
ライブラリ sfun_bet.lib とオブジェクト sfun_bet.exp を作成中
sfun_bet_sub.obj : error LNK2019: 未解決の外部シンボル _gfortran_st_write が関数 clcdcm_ で参照されました
sfun_bet_sub.obj : error LNK2019: 未解決の外部シンボル _gfortran_transfer_character_write が関数 clcdcm_ で参照されました
sfun_bet_sub.obj : error LNK2019: 未解決の外部シンボル _gfortran_transfer_integer_write が関数 clcdcm_ で参照されました
sfun_bet_sub.obj : error LNK2019: 未解決の外部シンボル _gfortran_st_write_done が関数 clcdcm_ で参照されました
sfun_bet_sub.obj : error LNK2019: 未解決の外部シンボル _gfortran_transfer_real_write が関数 clcdcm_ で参照されました
sfun_bet_sub.obj : error LNK2019: 未解決の外部シンボル _gfortran_st_read が関数 clcdcm_ で参照されました
sfun_bet_sub.obj : error LNK2019: 未解決の外部シンボル _gfortran_st_read_done が関数 clcdcm_ で参照されました
sfun_bet_sub.obj : error LNK2019: 未解決の外部シンボル _gfortran_st_close が関数 bet_ で参照されました
sfun_bet_sub.obj : error LNK2019: 未解決の外部シンボル _gfortran_string_trim が関数 bet_ で参照されました
sfun_bet_sub.obj : error LNK2019: 未解決の外部シンボル _gfortran_concat_string が関数 bet_ で参照されました
sfun_bet_sub.obj : error LNK2019: 未解決の外部シンボル _gfortran_st_open が関数 bet_ で参照されました
sfun_bet_sub.obj : error LNK2019: 未解決の外部シンボル _gfortran_transfer_integer が関数 bet_ で参照されました
sfun_bet_sub.obj : error LNK2019: 未解決の外部シンボル _gfortran_transfer_real が関数 bet_ で参照されました
sfun_bet_sub.obj : error LNK2019: 未解決の外部シンボル _gfortran_string_len_trim が関数 bet_ で参照されました
sfun_bet_sub.obj : error LNK2019: 未解決の外部シンボル _gfortran_transfer_character が関数 bet_ で参照されました
sfun_bet_sub.obj : error LNK2019: 未解決の外部シンボル _gfortran_os_error が関数 bet_ で参照されました
sfun_bet_sub.obj : error LNK2019: 未解決の外部シンボル _gfortran_runtime_error が関数 bet_ で参照されました
sfun_bet.mexw64 : fatal error LNK1120: 17 件の未解決の外部参照
gfortranのライブラリをリンクすると解決できそうだということは分かったのですが,どのライブラリをリンクすればよいのか,
そもそもそのライブラリがどこにあるのかが分からず,途方に暮れています.
環境はWindows 11,MATLAB2024aで,使用しているコンパイラは,2024aに対応しているMinGW64 Compiler (FORTRAN)とMicrosoft Visual C++ 2022 (C)です.
どうか解決法をご教授いただけますと幸いです.よろしくお願いいたします.

Accepted Answer

N.Y.
N.Y. on 19 Jun 2024
Math Worksのサポート方にお聞きしたところ,やはりライブラリをリンク出来ていなかったことが原因でした.
そのライブラリがどこにあるのかがわからなかったのですが,win11,matlabR2024aを使用する私の環境だと,以下のパスに入っているようでした.
C:\ProgramData\MATLAB\SupportPackages\R2024a\3P.instrset\mingw_w64.instrset\lib\gcc\x86_64-w64-mingw32\8.1.0
(このパスはサポートの方に教えていただきました.windowsを使用してる方であればmatlabやmingwのバージョン部分をご自身の環境に合わせて変更していただければ同じようなパスに入っているのではないかと思います.)
MEX化は以下の手順で行います.
まず,fortranのサブルーチンコード(.f90)から.objファイルを生成します.
mex -c sfun_sub.f90
Cゲートウェイ関数と,上記で作成した.objファイルから.mexw64ファイルを生成します.この際,-Lオプションを使用してライブラリをリンクさせます.
mex sfun.c sfun_sub.obj -L'C:\ProgramData\MATLAB\SupportPackages\R2024a\3P.instrset\mingw_w64.instrset\lib\gcc\x86_64-w64-mingw32\8.1.0' -lgfortran -lquadmath
長きに渡り調査いただきましたサポートの方にこの場を借りて感謝申し上げます.

More Answers (1)

covao
covao on 8 Jun 2024
以下に参考情報があります。
mex コンパイラをMinGW64に設定し、FORTRANのソースコードがあれば、gfortranコンパイラをインストールして、ライブラリを生成し直してみる方法が考えられます。
関連情報

Categories

Find more on ビッグ データの処理 in Help Center and File Exchange

Products


Release

R2024a

Community Treasure Hunt

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

Start Hunting!