2012-11-11 11 views
3

我在尝试更新一个使用SWIG构建从ruby到matlab的接口的项目。 matlab的C-API已经改变,现在我在运行时遇到以下错误。我应该使用一个SWIG类型图为ruby Fixnum - > matlab mwSize?

`mxCreateDoubleMatrix_730': Expected argument 0 of type mwSize, but got Fixnum 20 (TypeError)

我发现tmwtypes.h定义mwSize,这是不被包括在痛饮接口文件:

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

但是,如果我添加tmwtypes.h到包括痛饮接口部分,我仍然得到类型错误,如果我把它添加到既包括和解析部分,我得到以下编译错误:

Error: CPP #error ""This code must be compiled using a 2's complement representation for signed integer values"". Use the -cpperraswarn option to continue swig processing.

上tmwtypes.h放弃,我的解决办法是添加以下的SWIG接口ace文件。

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

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

添加此类型映射后,程序编译,似乎很好地工作。

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

  1. 是正确的解决方案,我与mwSize具有类型错误。我应该尝试其他方法吗?

  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'

谢谢!

回答

0

我能够取代typemap有:

typedef size_t mwSize; 

但是,我不能提供任何洞察是怎么回事。

相关问题