Integrating Java, C++ and R

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Integrating Java, C++ and R

Royden Fernandes
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]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: Integrating Java, C++ and R

Suzen, Mehmet-2
On 4 January 2013 11:36, Royden Fernandes <[hidden email]> wrote:
> Hi,
>
> I am able to integrate C++ and R through RInside library. However when I

Questions regarding RInside should go to the rcpp-devel mailing list.
http://lists.r-forge.r-project.org/mailman/listinfo/rcpp-devel

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: Integrating Java, C++ and R

Dirk Eddelbuettel

On 4 January 2013 at 16:57, Suzen, Mehmet wrote:
| On 4 January 2013 11:36, Royden Fernandes <[hidden email]> wrote:
| > Hi,
| >
| > I am able to integrate C++ and R through RInside library. However when I
|
| Questions regarding RInside should go to the rcpp-devel mailing list.
| http://lists.r-forge.r-project.org/mailman/listinfo/rcpp-devel

Very good.

But to the OP's defence -- he posted there. But as he himself stated (in what
you still quote here): The RInside integration of R and C++ works for him,
but Java created trouble.  So I recommended r-devel (not r-help) to seek help
from someone with better Java understanding.

Dirk

--
Dirk Eddelbuettel | [hidden email] | http://dirk.eddelbuettel.com

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: Integrating Java, C++ and R

Simon Urbanek

On Jan 4, 2013, at 11:41 AM, Dirk Eddelbuettel wrote:

>
> On 4 January 2013 at 16:57, Suzen, Mehmet wrote:
> | On 4 January 2013 11:36, Royden Fernandes <[hidden email]> wrote:
> | > Hi,
> | >
> | > I am able to integrate C++ and R through RInside library. However when I
> |
> | Questions regarding RInside should go to the rcpp-devel mailing list.
> | http://lists.r-forge.r-project.org/mailman/listinfo/rcpp-devel
>
> Very good.
>
> But to the OP's defence -- he posted there. But as he himself stated (in what
> you still quote here): The RInside integration of R and C++ works for him,
> but Java created trouble.  So I recommended r-devel (not r-help) to seek help
> from someone with better Java understanding.
>

Agreed. It will require combined knowledge of Rcpp and Java, though. What is testR()? Note that R requires a set of environment variables to be setup correctly in order to run - so did you start your program using R CMD java ...? Also you will likely need to make sure that you disable stack limit checks since java may change the stack depending on the thread. Another alternative would be to use JRI as a starting point since it solves all the R/Java issues and then call C++ code from there.

Cheers,
Simon


> Dirk
>
> --
> Dirk Eddelbuettel | [hidden email] | http://dirk.eddelbuettel.com
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
>

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.