我正在尝试更新一个使用 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'
谢谢!