Использование SWIG для возврата Byte [], вызывающего jvm для segv при выходе

0

Я добавил метод к классу, чтобы вернуть нулевой конец набора байтов. Я хотел вернуть байт [] в java. В результате этого изменения функция, похоже, работает чудесно, если возвращает байты, но 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 Runtime Environment (build 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

Теги:
swig
jvm

2 ответа

0

оказывается, это было взаимодействие с другими потоками, которые все еще существовали в родном мире. Это вообще не имело никакого отношения к Java.

0

Взгляните на java/typemaps.i из дистрибутива SWIG. Вероятно, он уже содержит требуемые типовые символы. Проверьте OUTPUT_TYPEMAP INOUT_TYPEMAP OUTPUT_TYPEMAP или INOUT_TYPEMAP.

  • 0
    Нет typemaps.i имеет дело только с указателями через typemap (argout)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню