似乎SWIG指针转换is broken:
*(int **)&jresult = result; // shenanigans
return jresult;
真的应该是
jresult= (jlong)result;
如何挂钩SWIG告诉它如何投射?
答案 0 :(得分:1)
您可以使用类型图。有关详细信息,请参阅文档here。可能看起来像下面的代码。
%typemap(out) TYPE *
%{
*($&1_ltype)&$result = (jlong)$1;
%}
答案 1 :(得分:1)
虽然Frohnzie的答案在技术上是正确的(毕竟这是我要求的),但最好的解决方案不是破解SWIG如何投射,而是将-fno-strict-aliasing
传递给gcc。
专门在SWIG文档中埋葬says what to do:
重要强>
如果您打算使用gcc打开优化(例如 -O2),确保您还使用-fno-strict-aliasing进行编译。海湾合作委员会 从gcc-4.0开始,优化变得更加激进 将导致代码失败并具有严格的别名优化 打开。有关详细信息,请参阅C/C++ to Java typemaps部分。