2012-03-29 8 views
6

C++ 11で書かれたコードをGNU/Linux用のMATLAB MEXファイルの一部としてコンパイルしたいと思います。C++ 11コードをMATLAB mexファイルの一部としてコンパイル

問題は、LinuxのMATLABはGCC 4.3(以前)のみをサポートしており、C++ 11コードをコンパイルするために必要なGCC 4.7はサポートしていないということです。

問題を回避することはできますか?

GCC 4.7を使用していくつかのオブジェクトファイルをコンパイルし、GCC 4.3を使用してそれらをMEXファイルにリンクすることでこれを回避することは可能でしょうか?

ありがとうございます!

+0

サポートされていないとはどういう意味ですか? 最後に、mexファイルは単純なCインタフェースを持つ共有ライブラリです。したがって、手動でコンパイルする必要があり、いくつかのヘッダーを編集する必要があるかもしれませんが、動作させる必要があります。 – Trass3r

+0

この回答をご覧ください:http://stackoverflow.com/questions/25648949/error-when-compiling-c11-code-in-a-matlab-mex-file#25649348基本的には、mexopts.shで定義されたCFLAGSに-std = C++ 11を追加すると問題ありません。 – efx

答えて

5

あなたの4.3エクステンションにコードを書いてコンパイルすることができたら、4.7で書いたコンパイルした共有オブジェクトをdlopenするコードを書いてください。 4.7 .soを使用してC++ 11の作業をすべて行い、Cインタフェースを介してその情報を渡します。あなたが書いた4.3のextionsionは、すべてのMATLAB interopのものにアクセスできます。

これはさまざまな方法でも可能ですが、これは最もクリーンです。 2つの異なるバージョンの標準ライブラリ(全く異なる)にアクセスするので、オブジェクトファイルを4.3拡張にリンクしてはいけません。異なるレイアウト/メソッド/などで同じクラスの複数のdefnitionを持つことはできません。あなたはC++のOne Definition Rule(ODR)と戦っています。

関連する問題