Hi,

I am able to integrate C++ and R through RInside library. However when I
use a jni call as my UI is through java it crashes at C++ side. My files
are

------------------------------------------------

JNICallingClass.C:

JNIEXPORT void JNICALL Java_CallR_run (JNIEnv* env, jobject callr){

        std::cout << "Inside JNICALL" << std::endl;

        testR();

        std::cout << "ENd of JNICALL" << std::endl;

}

-------------------------------------------------

CppCall2R.C

void testR(){

        Rcpp::NumericVector vec(1);

        cout << "RInside ready" << endl;

}

---------------------------------------------------

JavaClass.java

public class CallR{

        static{

                try {


                         System.loadLibrary("callr");


                 } catch (UnsatisfiedLinkError e) {

                        System.err.println("Native code library failed to
load.\n" + e);

                        System.exit(1);

                }

        }

        public native void run();

        public static void main(String[] args){

                CallR callr = new CallR();

                //Runtime.getRuntime().exec("R");

                callr.run();

        }

}

----------------------------------------------------------------------------

If I just compile the C++ code and invoke it through a main C++ class I get
no error . But when I call the code from Java I get the following error:

#

# A fatal error has been detected by the Java Runtime Environment:

#

#  SIGSEGV (0xb) at pc=0x00007f9e6974ba8e, pid=5891, tid=140319087077120

#

# JRE version: 6.0_31-b05

# Java VM: Java HotSpot(TM) 64-Bit Server VM (20.6-b01 mixed mode
linux-amd64 compressed oops)

# Problematic frame:

# C  [libR.so+0x11aa8e]  R_gc+0x9e

--------------------------------------------------------------------------------------------

The error log is :

Current thread (0x00007f9e90006800):  JavaThread "main" [_thread_in_native,
id=5892, stack(0x00007f9e95472000,0x00007f9e95573000)]


 siginfo:si_signo=SIGSEGV: si_errno=0, si_code=1 (SEGV_MAPERR),
si_addr=0x0000000000000018


 Registers:

RAX=0x0000000000000001, RBX=0x0000000000000030, RCX=0x0000000000000000,
RDX=0x00007f9e900b7588

RSP=0x00007f9e95571580, RBP=0x0000000000000028, RSI=0x0000000000000000,
RDI=0x0000000000000004

R8 =0x00007f9e69af9990, R9 =0x000000000000004f, R10=0x00007f9e69af9850,
R11=0x00000036b327f430

R12=0x00007f9e900b7580, R13=0x0000000000000001, R14=0x0000000000000001,
R15=0x00007f9e69adfc00

RIP=0x00007f9e6974ba8e, EFLAGS=0x0000000000010206,
CSGSFS=0x0000000000000033, ERR=0x0000000000000004

  TRAPNO=0x000000000000000e


 Top of Stack: (sp=0x00007f9e95571580)

0x00007f9e95571580:   0000000000000000 0000000000000001

0x00007f9e95571590:   000000000000000e 000000077b07d340

0x00007f9e955715a0:   00007f9e95571948 00007f9e6974c9ed

0x00007f9e955715b0:   000000077b07d340 00007f9e95571640

0x00007f9e955715c0:   0000000000000000 00000036b2e14915

0x00007f9e955715d0:   0000000000000001 00000036b32e495d

0x00007f9e955715e0:   00007f9e8c3f2430 000000077b07d340

0x00007f9e955715f0:   00007f9e95571640 0000000000000000

0x00007f9e95571600:   000000077b07d340 00007f9e95571948

0x00007f9e95571610:   00007f9e90006800 00007f9e8c1e9857

0x00007f9e95571620:   00007f9e95571898 00007f9e95571860

0x00007f9e95571630:   00007f9e95572700 000000077b07d340

0x00007f9e95571640:   00007f9e955718b0 00007f9e8c1e94cf

0x00007f9e95571650:   00007f9e6918ba98 0000000000000000

0x00007f9e95571660:   00007f9e6918b990 00007f9e900b5330

0x00007f9e95571670:   00007f9e900b5330 00007f9e900b5330

0x00007f9e95571680:   0000000000000000 0000000000000000

0x00007f9e95571690:   0000000000000000 00007f9e691a1ac0

0x00007f9e955716a0:   0000000000000000 0000000000000000

0x00007f9e955716b0:   0000000000000000 0000000000000000

0x00007f9e955716c0:   0000000000000000 00007f9e900b50f0

0x00007f9e955716d0:   0000000000000001 0000000000000008

0x00007f9e955716e0:   0000000000000000 0000000000000000

0x00007f9e955716f0:   0000003600000000 00007f9e900b5330

0x00007f9e95571700:   0000000000002000 00007f9e00000001

0x00007f9e95571710:   0000000000000000 0000000000000000

0x00007f9e95571720:   0000000000000000 00007f9e691a1f80

0x00007f9e95571730:   0000000000000000 0000000000000000

0x00007f9e95571740:   0000000000000000 0000000000000000

0x00007f9e95571750:   00007f9e6918bac0 0000000000000006

0x00007f9e95571760:   0000000000000000 0000000000001002

0x00007f9e95571770:   0000003600000002 0000000000000000


 Instructions: (pc=0x00007f9e6974ba8e)

0x00007f9e6974ba6e:   40 04 01 85 ed 4d 89 60 08 49 89 0c 24 48 8d 0d

0x00007f9e6974ba7e:   6e dc 3a 00 4c 8d 14 01 49 8b 0a 74 4d 44 89 e8

0x00007f9e6974ba8e:   4c 8b 49 18 31 f6 c1 e0 05 89 c7 4c 89 d0 0f 1f

0x00007f9e6974ba9e:   40 00 41 83 00 01 48 89 4a 10 83 c6 01 48 89 51


 Register to memory mapping:


 RAX=0x0000000000000001 is an unknown value

RBX=0x0000000000000030 is an unknown value

RCX=0x0000000000000000 is an unknown value

RDX=0x00007f9e900b7588 is an unknown value

RSP=0x00007f9e95571580 is pointing into the stack for thread:
0x00007f9e90006800

RBP=0x0000000000000028 is an unknown value

RSI=0x0000000000000000 is an unknown value

RDI=0x0000000000000004 is an unknown value

R8 =0x00007f9e69af9990: <offset 0x4c8990> in /usr/lib64/R/lib/libR.so at
0x00007f9e69631000

R9 =0x000000000000004f is an unknown value

R10=0x00007f9e69af9850: <offset 0x4c8850> in /usr/lib64/R/lib/libR.so at
0x00007f9e69631000

R11=0x00000036b327f430: __libc_malloc+0 in /lib64/libc.so.6 at
0x00000036b3200000

R12=0x00007f9e900b7580 is an unknown value

R13=0x0000000000000001 is an unknown value

R14=0x0000000000000001 is an unknown value

R15=0x00007f9e69adfc00: <offset 0x4aec00> in /usr/lib64/R/lib/libR.so at
0x00007f9e69631000



 Stack: [0x00007f9e95472000,0x00007f9e95573000],  sp=0x00007f9e95571580,
 free space=1021k

Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native
code)

C  [libR.so+0x11aa8e]  R_gc+0x9e


 [error occurred during error reporting (printing native stack), id 0xb]


 Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)

j  CallR.run()V+0

j  CallR.main([Ljava/lang/String;)V+9

v  ~StubRoutines::call_stub


 Is there a solution for this?

Roy

	[[alternative HTML version deleted]]


