3

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つの関連する質問があります:

  1. 私がmwSizeで持っているTypeErrorの正しい解決策です。代わりに何か他のことを試してみるべきですか?

  2. 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'を提供します

ありがとう!

4

1 に答える 1

0

を次のように置き換えることができましたtypemap

typedef size_t    mwSize;

しかし、私は何が起こっているのかについての洞察を提供することはできません。

于 2012-11-13T21:46:55.337 に答える