我在尝试更新一个使用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
添加此类型映射后,程序编译,似乎很好地工作。
我有两个相关的问题,我想回答:
是正确的解决方案,我与mwSize具有类型错误。我应该尝试其他方法吗?
我认为包括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'
谢谢!