【问题标题】:Should I be using a SWIG typemap for ruby Fixnum -> matlab mwSize?我应该为 ruby​​ Fixnum -> matlab mwSize 使用 SWIG 类型映射吗?
【发布时间】: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

添加此类型映射后,程序编译并且似乎可以完美运行。

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

  1. 是我在使用 mwSize 时遇到的 TypeError 的正确解决方案。我应该尝试其他方法吗?

  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'

谢谢!

【问题讨论】:

    标签: c ruby swig matlab-deployment matlab-engine


    【解决方案1】:

    我能够将typemap 替换为:

    typedef size_t    mwSize;
    

    但是,我无法对正在发生的事情提供任何见解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-25
      • 2023-03-18
      • 2019-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-15
      • 1970-01-01
      相关资源
      最近更新 更多