3

Boostライブラリを使用して機能するいくつかのcppコードでmexラッパーを取得しようとしています。しかし、そうではありません。

mex と g++ はどちらもコードを正常にコンパイルしますが、mexfunction の呼び出しはエラーで失敗します。

Unexpected Standard exception from MEX file.
What() is:std::bad_alloc

ブーストシリアライゼーションライブラリ内から(GDBから推測したように)、CPPのライブラリが正常に機能している間にロードされます。それらはまったく同じ入力で実行され、実行時に同じライブラリをロードします。私が理解しているように、mex は gcc を使用します ( で設定mex -setup) は、GCC でコンパイルされたコードと同じように動作する必要があります。どこで問題を探すべきかわかりません。

  1. MEX は、インストールされている GCC 4.6.4 ではなく、GCC 4.3.4 をサポートしているという警告をスローします。これが問題になるとは思っていません。Boost ライブラリはバージョン 1.51 です

  2. コア関数はファイル名を受け取り、ファイルから入力を読み取ります。クラスをインスタンス化し、いくつかの操作を実行し、Boost シリアライゼーション ライブラリを介してインスタンスを tmp ファイルにダンプします。その後の呼び出しに応じて、シリアル化によってインスタンスを読み取り、操作を実行して一時ファイルにダンプします。GCC でコンパイルされたコードが機能しているときに mex でコンパイルされたコードがエラーを残すのは、ファイルからインスタンスを読み取ろうとしているときです。概要は次のとおりです。

    class T { 
        Tree( std::string input ); //reads input and builds 
        void dump( std::string tmp ); //dumps D to tmp
        void read( std::string tmp); //reads tmp and builds D
        void operation1( std::string tmp); //reads D from tmp,does op1,dumps back D
        void operation2( std::string tmp); //reads D from tmp,does op2,dumps back D
    
        DataStructure D;
    };
    

なぜこれが起こっているのか、それとも明らかな何かが欠けているのかを理解する方法はありますか. どんな提案も役に立ちます。必要に応じて詳細を追加できます。

4

0 に答える 0