我一直试图在一些使用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编译代码一样。我不知道在哪里寻找问题。
MEX发出警告,表示它支持GCC 4.3.4,而不支持已安装的GCC 4.6.4。我不认为这是问题所在。 Boost库是版本1.51
核心函数接受文件名并从文件中读取输入。实例化一个类,执行一些操作并通过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;
};
有没有办法可以弄清楚为什么会发生这种情况,或者我错过了一些明显的东西。任何建议都可能有所帮助。我可以根据需要添加更多细节。