我在嘗試更新一個使用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
添加此類型映射後,程序編譯,似乎很好地工作。
我有兩個相關的問題,我想回答:
是正確的解決方案,我與mwSize具有類型錯誤。我應該嘗試其他方法嗎?
我認爲包括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'
謝謝!