我正在尝试更新一个使用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
添加此类型地图后,程序会编译并且似乎完美无缺。
我想回答两个相关的问题:
我正在使用mwSize的TypeError的正确解决方案。我应该尝试别的吗?
我认为包括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 :(得分:0)
我能够将typemap
替换为:
typedef size_t mwSize;
但是,我无法提供有关正在发生的事情的任何见解。