重写SWIG铸造

时间:2011-09-21 22:24:05

标签: android java-native-interface swig

似乎SWIG指针转换is broken

*(int **)&jresult = result;   // shenanigans
return jresult;

真的应该是

jresult= (jlong)result; 

如何挂钩SWIG告诉它如何投射?

2 个答案:

答案 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部分。