ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

mex

C/C++ または Fortran のソース コードから MEX 関数をビルドする

構文

mex filenames
mex option1 ... optionN filenames
mex -setup lang
mex -setup -client engine [lang]

説明

メモ

mex コマンドは、MATLAB データ APIC 行列 API およびFortran 行列 APIで記述された MEX 関数とエンジン アプリケーションをビルドします。

mex filenames は、1 つ以上の C、C++ または Fortran のソース ファイルをコンパイルしてリンクし、MATLAB® から呼び出すことができるバイナリ MEX ファイルを作成します。filenames は、ソース ファイルを指定します。また、スタンドアロンの MATLAB エンジンおよび MAT ファイル アプリケーションの実行可能ファイルもビルドします。

MATLAB は、コンパイラがインストールされている場合には、filenames 引数の言語に基づいて、自動的にコンパイラを選択します。

mex option1 ... optionN filenames は、指定されたビルド オプションを使用してビルドします。option1 ... optionN 引数は、既定の mex ビルド構成を補足またはオーバーライドします。

mex -setup lang は、指定された lang に対するコンパイラを選択します。指定された言語に対する既定のコンパイラを変更するには、このオプションを使用します。

mex -setup -client engine [lang] はエンジン アプリケーションをビルドするためのコンパイラを選択します。既定のコンパイラを変更する場合はこのオプションを使用します。引数 lang を使用して Fortran または C++ のコンパイラを選択します。

すべて折りたたむ

単一の C プログラム yprime.c を MEX ファイルにビルドします。

パス c:\work に書き込み可能フォルダーを作成し、現在のフォルダーとして設定します。

[s,msg,msgid] = mkdir('c:\work');
if (isempty(msgid))
    mkdir('c:\work')
end
cd c:\work

matlabroot/extern/examples フォルダーからソース コードの例をコピーします。

copyfile(fullfile(matlabroot,'extern','examples','mex','yprime.c'),'.','f')

MEX ファイルをビルドします。出力には、コンパイラ固有の情報が表示されます。

mex yprime.c
Building with 'MinGW64 Compiler  C '.
MEX completed successfully.

テストします。

T=1;
Y=1:4;
yprime(T,Y)
ans =

    2.0000    8.9685    4.0000   -1.0947

コンパイルやリンクのコマンドおよびトラブルシューティングに役立つその他の情報を表示するには、詳細モードを使用します。

mex -v -compatibleArrayDims yprime.c

出力には、プラットフォームおよびコンパイラ固有の情報が表示されます。

-Wall を既存のコンパイラ フラグに付加して、yprime.c MEX ファイルをビルドします。値にスペース文字が含まれているので、文字列を区切らなければなりません。使用する区切り文字はプラットフォームに依存します。

MATLAB プロンプトでは MATLAB の一重引用符 (') を使用してください。

mex -v COMPFLAGS='$COMPFLAGS -Wall' yprime.c

gcc/g++ を基にした MinGW-w64 コンパイラでは、Linux® コンパイラ フラグを使用します。

mex -v CXXFLAGS='$CXXFLAGS -Wall' yprime.c

Windows® コマンド プロンプトでは二重引用符 (") を使用してください。

mex -v COMPFLAGS="$COMPFLAGS -Wall" yprime.c

Mac と Linux 上のシェル コマンド ラインでは、一重引用符 (') を使用してください。

mex -v CFLAGS='$CFLAGS -Wall' yprime.c

MEX ファイルの例 fulltosparse は、loadsparse.Ffulltosparse.F の 2 つの Fortran ソース ファイルで構成されます。この例を実行するには、サポートされる Fortran コンパイラがシステムにインストールされている必要があります。

ソース ファイルを現在のフォルダーにコピーします。

copyfile(fullfile(matlabroot,'extern','examples','refbook','loadsparse.F'),'.','f')
copyfile(fullfile(matlabroot,'extern','examples','refbook','fulltosparse.F'),'.','f')

fulltosparse MEX ファイルをビルドします。コマンド ラインの最初のファイルが fulltosparse.F なので、MEX ファイルの名前は fulltosparse です。出力には、コンパイラ固有の情報が格納されます。

mex -largeArrayDims fulltosparse.F loadsparse.F
Building with 'Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2012'.
MEX completed successfully.

テストします。

full = eye(5);
spar = fulltosparse(full)
spar =

    1,1         1
    2,2         1
    3,3         1
    4,4         1
    5,5         1

現在のフォルダー内のすべての C ソース ファイルを MEX ファイル mymex にまとめます。MEX ファイルの名前を制御するには、-output オプションを使用します。

mex -output mymex *.c

ビルド コマンドを実行せずにその詳細をプレビューするには、-n オプションを使用します。出力には、プラットフォームおよびコンパイラ固有の情報が格納されます。

mex -n yprime.c

ソース MEX ファイルとは別にコンパイルするオブジェクト ファイルにリンクすることができます。

MEX ファイルの例 fulltosparse は、2 つの Fortran ソース ファイルで構成されます。fulltosparse ファイルは、mexFunction サブルーチンを含むゲートウェイ ルーチンです。loadsparse には、計算ルーチンが含まれています。

この例を実行するには、サポートされる Fortran コンパイラがシステムにインストールされている必要があります。計算サブルーチンを現在のフォルダーにコピーします。

copyfile(fullfile(matlabroot,'extern','examples','refbook','loadsparse.F'),'.','f')

サブルーチンをコンパイルし、オブジェクト ファイルを別のフォルダー c:\objfiles に配置します。

mkdir c:\objfiles
mex -largeArrayDims -c -outdir c:\objfiles loadsparse.F
Building with 'Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2012'.
MEX completed successfully.

ゲートウェイ サブルーチンを現在のフォルダーにコピーします。コンパイルして loadsparse オブジェクト ファイルとリンクします。

copyfile(fullfile(matlabroot,'extern','examples','refbook','fulltosparse.F'),'.','f')
mex -largeArrayDims fulltosparse.F c:\objfiles\loadsparse.obj
Building with 'Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2012'.
MEX completed successfully.

複素数ルーチンを処理するための MATLAB LAPACK ライブラリ サブルーチンをインクルードするパスを指定するには、-I オプションを使用します。これらのサブルーチンを使用するには、MEX ファイルがヘッダー ファイル fort.h にアクセスしなければなりません。

matrixDivideComplex.c 例を現在のフォルダーにコピーします。

copyfile(fullfile(matlabroot,'extern','examples','refbook','matrixDivideComplex.c'),'.','f')

'-I'fort.h ファイルへのパスを連結して -I 引数を作成します。

ipath = ['-I' fullfile(matlabroot,'extern','examples','refbook')];

LAPACK ライブラリ ファイルの名前とパスを表す変数と複素数処理ルーチンを含むファイル fort.c を作成します。

lapacklib = fullfile(matlabroot,'extern','lib',computer('arch'),'microsoft','libmwlapack.lib');
fortfile = fullfile(matlabroot,'extern','examples','refbook','fort.c');

MEX ファイルをビルドします。

mex('-v','-R2017b',ipath,'matrixDivideComplex.c',fortfile,lapacklib)

Windows プラットフォームで matrixDivide.c の例をビルドします。これには -L および -l オプションを使用して、libmwlapack.lib ライブラリを指定します。ライブラリ ファイルは matlabroot\extern\lib\arch\microsoft フォルダーにあります。

matrixDivide.c 例を現在のフォルダーにコピーします。

copyfile(fullfile(matlabroot,'extern','examples','refbook','matrixDivide.c'),'.','f')

matlabroot の値を取得します。

matlabroot
ans =

C:\Program Files\MATLAB\R2014a

arch の値を取得します。

computer('arch')
ans =

win64

MEX ファイルをビルドするには、以下のステートメントに示すように、matlabrootarch の値を mex コマンドにコピーします。

mex '-LC:\Program Files\MATLAB\R2014a\extern\lib\win64\microsoft'...
   -llibmwlapack matrixDivide.c

パスの \Program Files にはスペースが含まれているので、文字 ' を使用しなければなりません。

mxcreatecharmatrixfromstr.c では、#define シンボル SPACE_PADDING を使用して、行列内の文字ベクトル間にどの文字を使うかを定義します。値を設定するには、-D オプションを使用して MEX ファイルをビルドします。

例を現在のフォルダーにコピーします。

copyfile(fullfile(matlabroot,'extern','examples','mx','mxcreatecharmatrixfromstr.c'),'.','f')

SPACE_PADDING 命令を設定して、値の間にスペースを追加します。

mex mxcreatecharmatrixfromstr.c -DSPACE_PADDING
Building with 'MinGW64 Compiler  C '.
MEX completed successfully.

engwindemo.c エンジンの例を現在のフォルダーにコピーします。

copyfile(fullfile(matlabroot,'extern','examples','eng_mat','engwindemo.c'),'.','f')
mex -client engine engwindemo.c

Windows プラットフォームを使用している場合、最初に MATLAB を COM サーバーとして登録しなければなりません。詳細については、COM サーバーとしての MATLAB の登録を参照してください。

例を実行します。

!engwindemo
mex -setup

MATLAB は Supported and Compatible Compilers のリストに基づいて、お使いのバージョンおよびシステム用のオプションを表示します。

入力引数

すべて折りたたむ

名前とファイル拡張子を含む 1 つ以上のファイル名。string または文字ベクトルとして指定します。ファイルが現在のフォルダーにない場合は、ファイルへの絶対パスを指定します。

ファイル名には、以下を任意に組み合わせることができます。

  • C、C++ または Fortran 言語のソース ファイル

  • Simulink® S-Function ファイル

  • オブジェクト ファイル

  • スタティック ライブラリ ファイル。ダイナミック ライブラリをリンクする場合は、-llibname オプションを使用します。

filenames のリストに最初に現れるソース コード ファイルが、バイナリ MEX ファイルの名前になります。この命名規則をオーバーライドするには、'-output' オプションを使用します。

データ型: char

1 つまたは複数のビルド オプション。以下のいずれかの値として指定します。オプションは、指示がある場合を除き、任意のプラットフォームで任意の順序で指定できます。

オプション説明

@rspfile

Windows RSP ファイルを使用します。RSP ファイルは、コマンド ライン オプションを含むテキスト ファイルです。非 ASCII 文字はサポートされません。

-c

オブジェクト ファイルのみをコンパイルします。バイナリ MEX ファイルはビルドしません。

-client engine

エンジン アプリケーションをビルドします。

-compatibleArrayDims
-largeArrayDims (既定)

指定された MATLAB 配列ハンドリング API とリンクします。

  • -compatibleArrayDims — MATLAB Version 7.2 の配列ハンドリング API を使用します。これは、配列の要素数を 231-1 に制限します。C MEX S-Function のみで既定のオプション。

  • -largeArrayDims — MATLAB 大規模配列ハンドリング API を使用します。この API は、要素数が 231-1 を超える配列を扱います。LAPACK または BLAS 関数を呼び出すときには、このオプションを使用しなければなりません。MEX ファイルの既定のオプション。

-Dsymbolname
-Dsymbolname=symbolvalue
-Usymbolname

-D オプションは、C プリプロセッサ マクロを定義します。ソース ファイル内での以下と等価です。

  • #define symbolname

  • #define symbolname symbolvalue

-U オプションは、C プリプロセッサ マクロ symbolname のすべての初期定義を削除します(-D オプションの逆)。

D または Usymbolname との間にスペースを追加しないでください。= 記号の前後にスペースを追加しないでください。

例: コンパイラ命令を定義

-f filepath

エンジン アプリケーションをビルドするには、-client engine オプションを使用します。

mex コンフィギュレーション ファイルの名前と場所を指定します。既定のコンパイラの選択をオーバーライドします。既定以外のコンパイラを使用する場合の詳細については、既定のコンパイラの変更を参照してください。filepath は、コンフィギュレーション ファイルの名前と絶対パスであり、string または文字ベクトルとして指定されます。

-g

シンボリック情報を追加し、ビルドされたオブジェクト コードの最適化を無効にします。デバッグに使用します。最適化を使用してデバッグする場合は、-O オプションを追加します。

-h[elp]

mex のヘルプを表示します。オペレーティング システムのプロンプトから使用します。

-Ipathname

#include ファイルを検索するフォルダーのリストへ pathname を追加します。

Ipathname の間にスペースを追加しないでください。

例: インクルード ファイルへのパスを指定する

-llibname
-Llibfolder -llibname

ダイナミック オブジェクト ライブラリ libname とリンクします。オプションでフォルダー libfolder を指定できます。

MATLAB は libname を以下のファイルに展開します。

  • libname.lib または liblibname.lib — Windows システム

  • liblibname.dylibMac システム

  • liblibname.so — Linux システム

使用する場合、-L オプションは -l オプションの前に置かなければなりません。Linux または Mac システムで -L オプションを使用する場合は、実行時ライブラリ パスの設定で説明されているとおり、ランタイム ライブラリのパスも設定しなければなりません。

llibname の間、または Llibfolder の間にスペースを追加しないでください。

-l オプションは小文字の L で指定します。

スタティック ライブラリをリンクするには、filenames 入力引数を使用します。

例: ライブラリ ファイルへのパスを指定する

-largeArrayDims (既定)
-compatibleArrayDims

指定された MATLAB 配列ハンドリング API とリンクします。

  • -largeArrayDims — MATLAB 大規模配列ハンドリング API を使用します。この API は、要素数が 231-1 を超える配列を扱います。LAPACK または BLAS 関数を呼び出すときには、このオプションを使用しなければなりません。既定のオプション

  • -compatibleArrayDims — MATLAB Version 7.2 の配列ハンドリング API を使用します。これは、配列の要素数を 231-1 に制限します。C MEX S-Function のみで既定のオプション。

詳細モード (-v オプション) では、-compatibleArrayDims または -largeArrayDims オプションのどちらも指定しない場合、MATLAB は既定オプションを示すメッセージを表示します。

-n

mex が実行するコマンドを表示します。ただし、実行はしません。

例: ビルド コマンドをプレビューする

-O

オブジェクト コードを最適化します。最適化を使用してコンパイルするには、このオプションを使用します。

最適化は既定で有効になっています。-g オプションを -O オプションなしで入力すると、最適化は無効になります。

このオプションは大文字の O で指定します。

-outdir dirname

すべての出力ファイルをフォルダー dirname へ保存します。

例: 個別のオブジェクト ファイルへのリンクを作成する

-output mexname

既定の MEX ファイル命名メカニズムをオーバーライドします。適切な MEX ファイル拡張子をもつ、mexname という名前のバイナリ MEX ファイルを作成します。

例: ワイルドカードを使用したソース ファイルの結合

-R2017b (既定)
-R2018a

C 行列 API のリリース固有のバージョンとリンクします。このオプションは、MATLAB データ API を使用する MEX ファイルまたはエンジン アプリケーションに使用しないでください。

  • -R2017b — 既定のオプション。-R2017b-largeArrayDims オプションを使用し、グラフィックス オブジェクトのハンドルを double ではなく object として扱います。

  • -R2018a — 型付きのデータ アクセス関数を含むインターリーブされた複素数 API を使用します。MATLAB は Fortran 関数に関して、インターリーブされた複素数 API をサポートしません。

-setup lang

lang 言語 MEX ファイルをビルドするように、既定のコンパイラを変更します。このオプションを使用すると、mex はその他のコマンド ライン オプションをすべて無視します。

-silent

情報を伝えるメッセージを非表示にします。mex コマンドは、-silent を指定した場合でもエラーと警告を報告します。

-Usymbolname

C プリプロセッサ マクロの symbolname のすべての初期定義を削除します(-D オプションの逆)。

Usymbolname の間にスペースを追加しないでください。

-v

詳細モードでビルドします。すべてのコマンド ライン引数が処理された後、内部変数の値を表示します。コンパイルおよびリンクの各ステップのすべての評価を表示します。コンパイラ設定の問題のトラブルシューティングに使用します。

例: ビルドとトラブルシューティングの詳細情報の表示

varname=varvalue

変数 varname の既定の設定をオーバーライドします。コマンド ライン引数がすべて処理された後に、このオプションが処理されます。

例: 既定のコンパイラ スイッチ オプションのオーバーライド.

言語。次の値のいずれかとして指定します。

C

C コンパイラ (C++ を含む)。

C++ または CPP

C++ コンパイラ。

Fortran

Fortran コンパイラ。

ヒント

  • mex は以下の場所から実行できます。

    • MATLAB コマンド ウィンドウ

    • Windows システム プロンプト

    • Mac ターミナル

    • Linux シェル

    MATLAB 以外のコマンド ラインで使用する場合、mex プログラムは、[matlabroot '/bin'] で指定されたフォルダーに格納されています。

  • MEX ファイルの拡張子はプラットフォームによって異なります。さまざまなプラットフォーム用のバイナリ MEX ファイルを同じフォルダーに配置できます。

    MEX ファイルのプラットフォーム依存の拡張子

    プラットフォームバイナリ MEX ファイルの拡張子

    Linux (64 ビット)

    mexa64

    Apple Mac (64 ビット)

    mexmaci64

    Windows (64 ビット)

    mexw64

    MEX ファイルの拡張子を識別するには、関数 mexext を使用してください。

  • mex を使用してスタンドアロンの MATLAB エンジンと MAT ファイルのアプリケーションの実行可能ファイルをビルドするには、-client engine オプションを使用してください。

  • mex コマンドは、二重引用符 (") を含むフォルダー名をサポートしません。

R2006a より前に導入