使用MEX文件在Octave中添加失败

时间:2014-03-31 15:27:54

标签: octave mex

最初为MATLAB编写的软件库,包含MATLAB和C源文件,正在移植到Octave。 C代码使用MATLAB MEX文件接口。该库在MATLAB上无错误地工作,但在Octave上没有。 C源已关闭,我无法访问它,但是有人亲切地为我编译了它。

以下Octave代码

Y=ones(size(X)) + X;

失败并显示错误

  

下标索引必须是正整数或逻辑。

X是MEX模块返回的矩阵。

我已经确认onessize指的是内置函数,而不是被某些局部变量覆盖。

我该如何解决这个问题?

修改 分解为步骤:

S=size(X);
O=ones(S);
X+O;

在最后一行给出上述错误,即添加。 whos命令输出:

octave:13> whos O X
Variables in the current scope:

   Attr Name        Size                     Bytes  Class
   ==== ====        ====                     =====  =====
        O         512x512                  2097152  double
        X         512x512                  2097152  double

Total is 524288 elements using 4194304 bytes

1 个答案:

答案 0 :(得分:0)

您报告的错误没有理由。我无法弄清楚它可能在做什么。如果我生成您报告的X矩阵,那么一切正常:

X = rand (512, 512);
S = size (X);
O = ones (S);
X+O;

我不知道您是如何确认使用内置函数的,所以可以检查一下这是否有效:

X = rand (512, 512);
S = builtin ("size", X);
O = builtin ("ones", S);
X+O;

或者可能是有人为你编译的mex文件以某种方式重载了double运算符?由于您没有它的来源,我建议您执行以下操作。调用mex函数后,保存X,退出并在新的Octave会话中加载它。检查错误是否消失,如果没有,请与我们共享文件,以便我们至少可以尝试重现该文件。

X = your_closed_source_mex (...);
save -binary data.dat X
exit();

然后开始一个新的Octave会话:

load -binary data.dat
whos X # confirm that X is loaded
X = rand (512, 512);
S = size (X);
O = ones (S);
X+O;