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 */
ただし、SwIGインターフェイスのインクルードセクションにtmwtypes.hを追加すると、TypeErrorが発生し、インクルードセクションと解析セクションの両方に追加すると、次のコンパイルエラーが発生します。
エラー:CPP #error ""このコードは、符号付き整数値の2の補数表現を使用してコンパイルする必要があります""。-cpperraswarnオプションを使用して、スウィッグ処理を続行します。
tmwtypes.hをあきらめて、私の解決策はSWIGインターフェースファイルに以下を追加することです。
%typemap(in) mwSize {
$1 = NUM2INT($input);
}
完全なSWIGインターフェイスファイルは、 https ://github.com/morrifeldman/matlab-ruby/blob/master/ext/matlab_api/matlab_api.iで確認できます。
このタイプマップを追加すると、プログラムがコンパイルされ、完全に機能するように見えます。
私が答えたい2つの関連する質問があります:
私がmwSizeで持っているTypeErrorの正しい解決策です。代わりに何か他のことを試してみるべきですか?
tmwtypes.hを含めると問題が解決すると思いました。なぜうまくいかなかったのですか?
参考までに、Xcode4.5.2でOSXMountainLionを使用しています。Makefileはgcc-4.2を呼び出しています。'gcc-4.2 --version'は'i686-apple-darwin11-llvm-gcc-4.2(GCC)4.2.1'を提供します
ありがとう!