Mex 文件执行中的错误,Matlab 窗口

Posted

技术标签:

【中文标题】Mex 文件执行中的错误,Matlab 窗口【英文标题】:Error in Mex file Execution, Matlab windows 【发布时间】:2015-01-02 12:09:24 【问题描述】:

我一直在尝试在 matlab 中编译一些 mex 文件。该文件编译良好,但在我运行它时抛出以下错误。

无效的 MEX 文件“filename.mexw32”:指定的过程无法 找到了。

我已将原因缩小到代码中使用的函数push_back()。代码sn-p如下。

typedef vector<node> node_list;

node_list q;...

node n;

n.id         = 0;

n.parent     = -1;


  n.is_leaf    = 0; // <- set to 1 if node symbol is a terminal

  n.rhs_index  = 0;

  n.symbol     = ctx.start_symbol;

  n.rule_index = 0; // <- set after computing argmax rule

  n.rhs_index  = 0;

  n.x          = start_x;

  n.y          = start_y;

  n.l          = start_l;

  n.ds         = 0;

  n.dx         = 0; // <- set if def rule

  n.dy         = 0; // <- set if def rule

  n.score      = start_score;

  n.loss       = 0; // <-- set if start symbol

  q.push_back(n);

最后一行 q.push_back(n); 导致错误。

我已经包含了头文件

mex.h、向量、iostream 和列表

我该如何解决这个问题?我应该在代码中定义方法 push_back 吗?如果是,我该怎么做?我是 C++ 的初学者。任何帮助将不胜感激。

【问题讨论】:

所以您是说代码可以编译,但是当您尝试从 MATLAB 调用它时,MATLAB 无法加载编译后的二进制文件? 是的。我收到上述错误。 听起来好像缺少依赖项,或者您正在为与您正在运行的版本不同的 MATLAB 版本进行编译。见***.com/questions/15338427/… 我没有使用任何额外的库或文件。只有一个 cpp 文件。我使用的是 32 位操作系统,windows 7 和 matlab r2012。我使用相同的 matlab 版本进行编译和执行。 您没有安装正确的 VS 运行时,或实现 node 的库。 【参考方案1】:

每个 mex 文件都需要一个入口点,这是一个名为“mexFunction”的函数。

名称“mexFunction”及其签名是固定的,所有 mex 函数都相同,但 matlab 将使用文件名来识别它们。

AFAIK,您无法以脚本样式运行 mex。

通常的做法是将代码编写为 C 函数,然后在“mexFunction”中调用该 C 函数。

【讨论】:

以上是关于Mex 文件执行中的错误,Matlab 窗口的主要内容,如果未能解决你的问题,请参考以下文章

如何诊断为啥在 MATLAB 中执行 .mex 文件时无法加载 .so 文件?

mex 文件未在 MATLAB 7.5.0 (R2007b) 中执行

为啥到达 MEX 文件的最后一行后返回 Matlab 需要这么长时间?

将 C++ MEX 文件中的值返回到 MATLAB

mex 文件崩溃,如何在 matlab 中使用 MATLAB_MEM_MGR?

在 MATLAB 中使用 MEX 文件访问存储在元胞数组中的矩阵