2012-11-11 13 views
3

我在嘗試更新一個使用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

添加此類型映射後,程序編譯,似乎很好地工作。

我有兩個相關的問題,我想回答:

  1. 是正確的解決方案,我與mwSize具有類型錯誤。我應該嘗試其他方法嗎?

  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'

謝謝!

回答

0

我能夠取代typemap有:

typedef size_t mwSize; 

但是,我不能提供任何洞察是怎麼回事。

相關問題