【发布时间】:2012-11-11 20:49:52
【问题描述】:
我正在尝试更新一个项目,该项目使用 SWIG 构建从 ruby 到 matlab 的接口。 matlab C-API 已更改,现在我在运行时收到以下错误。
`mxCreateDoubleMatrix_730':预期参数 0 类型为 mwSize,但得到了 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'
谢谢!
【问题讨论】:
标签: c ruby swig matlab-deployment matlab-engine