に思えることSWIGポインタキャストis broken:オーバーライドSWIGは
*(int **)&jresult = result; // shenanigans
return jresult;
それは本当にただ
jresult= (jlong)result;
がどのように私はどのようにキャストするためにそれを伝えるためにSWIGにフックすることができすべきですか?
に思えることSWIGポインタキャストis broken:オーバーライドSWIGは
*(int **)&jresult = result; // shenanigans
return jresult;
それは本当にただ
jresult= (jlong)result;
がどのように私はどのようにキャストするためにそれを伝えるためにSWIGにフックすることができすべきですか?
タイプマップを使用できます。詳細はdoc hereを参照してください。おそらく以下のコードのように見えます。
%typemap(out) TYPE *
%{
*($&1_ltype)&$result = (jlong)$1;
%}
Frohnzieの答えは(すべての後に、それは、私が尋ねたものです)技術的に正しいですが、最善の解決策は、SWIGは、鋳造んどのようにハックするが、GCCに-fno-strict-aliasing
を渡すことではありません。それは、具体的says what to do SWIGのドキュメントに埋もれ
:
重要
あなたが最適化を使用する場合は(たとえば -O2用)gccでオンになって、あなたはまたしてコンパイルすることを確認-fno-strict-aliasing。 GCC の最適化はgcc-4.0以降ではより積極的になり、 は厳密なエイリアス最適化で失敗したコードになります がオンになります。詳細については、C/C++ to Java typemapsセクションを参照してください。
あなたは一般的なのですか、これは文字通りのタイプマップですか? – paleozogt
ジェネリックである。タイプはあなたのタイプでなければなりません。私が入れたものは近いはずです。 – Frohnzie
*すべての*ポインタ型のtypemapを作成する必要がありますか?それは網羅的になるかもしれない。確かに、すべてのポインタのルールを指定する方法はありますか? – paleozogt