使用SWIG返回Byte []导致jvm退出时进行segv

时间:2013-11-20 18:24:45

标签: java c++ jvm swig

我在类中添加了一个返回null终止的方法 一组字节。我希望在java中返回一个byte [] 由于这种改变,功能似乎有效 奇妙的是返回字节,但是 jvm在退出时与segv崩溃。 我打印出“出口主”,出现在输出中 然后发生了segv

C ++类

class squid {
 const signed char* getBytes()
}

squidx.i

%typemap(jni) const signed char*        "jbyteArray"
%typemap(jtype) const signed char*      "byte[]"
%typemap(jstype) const signed char*     "byte[]"
%typemap(out) const signed char*
{
   long lSize = strlen($);

   // create a new byte[] object in Java
   jbyteArray data = JCALL1(NewByteArray, jenv, lSize);

   // copy pixels from the image buffer
   JCALL4(SetByteArrayRegion, jenv, data, 0, lSize, (jbyte*)result);

   $result = data;
}

// change Java wrapper mapping for unsigned char*
%typemap(javaout) const signed char* {
    return $jnicall;
}

java -version的结果

java版“1.7.0” Java(TM)SE运行时环境(构建pxa6470sr5-20130619_01(SR5)) IBM J9 VM(内部版本2.6,JRE 1.7.0 Linux amd64-64压缩参考文献20130617_152572(已启用JIT,已启用AOT) J9VM - R26_Java726_SR5_20130617_1436_B152572 JIT - r11.b04_20130528_38954ifx1 GC - R26_Java726_SR5_20130617_1436_B152572_CMPRSS J9CL - 20130617_152572) JCL - 20130616_01基于Oracle 7u25-b12

2 个答案:

答案 0 :(得分:0)

从SWIG发行版中查看java/typemaps.i。可能它已包含所需的类型地图。检查OUTPUT_TYPEMAPINOUT_TYPEMAP以获取参考实施。

答案 1 :(得分:0)

结果证明这是与本地世界中仍然存在的其他线程的交互 它根本与java无关。