当gcc工作时,Mex编译的代码无法运行

时间:2012-10-05 13:50:49

标签: matlab gcc mex

我一直试图在一些使用Boost库工作的cpp代码上获得一个mex包装器。但事实并非如此。

mex和g ++都可以很好地编译代码,但是对mexfunction的调用失败并出现错误:

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

来自boost序列化库(正如我从GDB中看到的)它加载而CPP的工作正常。它们在完全相同的输入上运行,并在运行时加载相同的库。 据我所知,mex使用gcc(通过mex -setup设置)应该像GCC编译代码一样。我不知道在哪里寻找问题。

  1. MEX发出警告,表示它支持GCC 4.3.4,而不支持已安装的GCC 4.6.4。我不认为这是问题所在。 Boost库是版本1.51

  2. 核心函数接受文件名并从文件中读取输入。实例化一个类,执行一些操作并通过boost序列化库将实例转储到tmp文件。 然后根据后续调用,通过序列化返回实例,执行操作并将其转储回临时文件。 正是在尝试从文件中读取实例时,mex编译的代码在GCC编译代码工作时出错。大纲如下:

    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;
    };
    
  3. 有没有办法可以弄清楚为什么会发生这种情况,或者我错过了一些明显的东西。任何建议都可能有所帮助。我可以根据需要添加更多细节。

0 个答案:

没有答案