2009-10-21 27 views
13

私はC++でコード化する必要のあるコードをいくつか持っています。これは、テンプレートに大きく依存しているためです。私はこのコードをMATLABから呼び出したい:基本的には、C++コードにいくつかのパラメータを渡し、C++コードでMATLABに行列を返す必要がある。私はこれがまだ私が探しているMEXファイルと呼ばれるものでこれが可能であると聞いた。しかし、私はこれらのMEXファイルで何がサポートされているか分かりません。 C++のすべて(例:STLBoost)はサポートされていますか?どれくらい難しいですか?MATLABからC++コードを呼び出しますか?

編集:共有ライブラリは必要ありません。shared_ptrのようなヘッダーのみのものです。

+0

[トレーニングビデオ(ペルシャ語)](https://drive.google.com/drive/folders/0B56iSBYoI8YbN2ExMzA5NTMtN2Q1NS00MGMyLTk3ODctYjNiMzM1ZjgwMzg2) – Ghominejad

答えて

8

MEX-files Guide、特にC++のセクション25-27をご覧ください。 基本的なSTL/Boostのデータ構造は機能するはずですが、Boostのスレッディングが問題になる可能性があります。
coutは、C++で期待どおりに機能しません。mexPrintfを代わりに使用する必要があります。

+0

私は経験から、いくつかの注意を提供します。 SimulinkとRTWを使用する場合は、-DRTフラグをコンパイルするときに設定されます。 boostの数学ライブラリの中には、テンプレートが使われています。 -DRTはこれらのクラスを強制終了します。この問題が発生した場合は、makeファイルで-DRTを-DRT = RTに変更してみてください。 – KitsuneYMG

3

STLとブーストを使用するC++ MEXファイルを作成することは間違いありません。一般的に、あなたはC++ MEXファイルの中で何でもできるはずです。実用上の主な制限は、MATLABにはすでに多数のライブラリが同梱されているため、共有ライブラリが必要なブーストピース(ヘッダーのみのものもあります)を使用している場合、コンパイルするバージョンと一致する必要がありますMATLABでのその出荷と一緒に。例えば

、ブースト1.36(あなたが<のmatlabroot >/binに/ <アーチ>にライブラリの名前を見ることによって伝えることができます)とMATLAB R2009bの船。

1

実際には、C++ファイルは外部コンパイラによってコンパイルされます。いずれかを選択するにはmex -setupを使用してください(hereはサポートされているコンパイラのリストです)。したがって、あまりにも多くの奇妙なことが起こらないようにすべきです。

私は昨年いくつかのMEXをやっていましたが、私の記憶は少し錆びますが、MEX機能を使ってMATLABアレイを構築する必要があります。私はMATLABのドキュメントが適切であること、そして全体の経験は苦痛ではないことを発見しました。

1

STLが確実にサポートされています。おそらくまだブースト。ポイントはあなたのコンピュータにあなたのSTLとBOOSTを配備している限り、あなたは行かなくてはなりません。

関連する問題