我应该为ruby Fixnum使用SWIG类型图 - > matlab mwSize?

时间:2012-11-11 20:49:53

标签: c ruby swig matlab-deployment matlab-engine

我正在尝试更新一个使用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会解决我的问题。为什么不起作用?

  3. 供参考,我正在使用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'

    谢谢!

1 个答案:

答案 0 :(得分:0)

我能够将typemap替换为:

typedef size_t    mwSize;

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