3

我正在尝试更新一个使用 SWIG 构建从 ruby​​ 到 matlab 的接口的项目。matlab C-API 已更改,现在我在运行时收到以下错误。

`mxCreateDoubleMatrix_730':mwSize 类型的预期参数 0,但得到了 Fixnum 20 (TypeError)

我发现在 tmwtypes.h 中定义了 mwSize,它没有包含在 SWIG 接口文件中:

tmwtypes.h:typedef int mwSize;
tmwtypes.h:typedef size_t    mwSize;         /* unsigned pointer-width integer */

但是,如果我将 tmwtypes.h 添加到 SWIG 接口的 include 部分,我仍然会收到 TypeError,如果我将它添加到 include 和 parse 部分,我会收到以下编译错误:

错误:CPP #error ""此代码必须使用带符号整数值的 2 的补码表示形式编译""。使用 -cpperraswarn 选项继续 swig 处理。

放弃 tmwtypes.h,我的解决方案是将以下内容添加到 SWIG 接口文件中。

%typemap(in) mwSize {
   $1 = NUM2INT($input);
}

您可以在以下位置查看完整的 SWIG 接口文件: https ://github.com/morrifeldman/matlab-ruby/blob/master/ext/matlab_api/matlab_api.i

添加此类型映射后,程序编译并且似乎可以完美运行。

我有两个相关的问题想回答:

  1. 是我使用 mwSize 遇到的 TypeError 的正确解决方案。我应该尝试别的东西吗?

  2. 我认为包括 tmwtypes.h 会解决我的问题。为什么它不起作用?

作为参考,我将 OSX Mountain Lion 与 Xcode 4.5.2 一起使用。Makefile 正在调用 gcc-4.2。'gcc-4.2 --version' 给出 'i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1'

谢谢!

4

1 回答 1

0

我能够将其替换为typemap

typedef size_t    mwSize;

但是,我无法对正在发生的事情提供任何见解。

于 2012-11-13T21:46:55.337 回答