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