環境:
- Matlab R2012a (必要に応じて他のユーザーにアクセスできます)
- すべてのツールボックス/コンパイラがインストールされています
- Ubuntu 12.04 64 ビットおよび/または Windows 7 64 ビット
私は、Matlab で書かれたソフトウェア パッケージのソースを使用しています (残念ながら独自仕様のため、コード例はありません... 申し訳ありません)。1 つの関数で、Control System Toolbox と Signal Processing Toolbox を簡単に使用しています。
すべてのツールボックスがインストールされているため、パーソナル コンピューターでコードを実行しても問題ありませんが、これら 2 つのツールボックスを使用して関数だけをコンパイル (mex または mcc) したいと考えています。もちろん、目標は、これらのツールボックスのないマシンでソフトウェアを実行し、残りのコードを変更できるようにすることです。
matlab によると、ほぼすべてのツールボックスを使用するコードをコンパイルしても問題ありません。mcc コンパイルをサポートするツールボックスのリストは次のとおりです: http://www.mathworks.com/products/compiler/supported/compiler_support.html
問題は、mcc-x
が関数の mex-ed バージョンを作成するオプションを使用してコンパイルすることを許可しなくなったため、C 実行可能ファイルを作成することを余儀なくされたということです (多分? できればそうしないでください)。この特定の関数は、大きな行列をパラメーターとして取り (コマンド ライン引数として記述するのは実際的ではありません)、セル配列の構造体を返します。
これを回避する唯一の方法 (私が今見ているように) は、引数 (大きな行列) をハード ドライブのバイナリ .mat ファイルに書き込み、コンパイルされた C バイナリに引数を読み込ませ、アルゴリズムを実行し、最後に保存することです。親スレッドがメモリにロードし直すための別の .mat の戻り値。
これはまったく実用的ではないようです。別の提案をいただければ幸いです。ここで不明な点があればお知らせください。前もって感謝します!
[編集 1] codegen パッケージはtf.m をサポートしていません。これは可能であるように思われます (そして、以前はmex -x
オプションで可能でした) が、私は途方に暮れています。どんな提案でも大歓迎です!