i'm using the following c++ code using namespace std; #include <iostream> #include <stdio.h> #include <opencv/cv.h> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv/highgui.h> #include <opencv/cv.h> #include <R.h> #include <Rinternals.h> #include <Rmath.h> extern "C" { SEXP FiltroGaus(SEXP size1_r, SEXP size2_r, SEXP sigma_r) { int size1 = INTEGER(size1_r)[0]; int size2 = INTEGER(size2_r)[0]; double sigma = REAL(sigma_r)[0]; } } The compilation go without errors but when in R i type .C("FiltroGaus",3,3,2) the message is: Errore: INTEGER() can only be applied to a 'integer', not a 'NULL' if i type .C("FiltroGaus",as.integer(3),as.integer(3),as.double(2)) the message is Errore: INTEGER() can only be applied to a 'integer', not a 'closure' while if i type .Call("FiltroGaus",as.integer(3),as.integer(3),as.double(2)) the message is NULL *** caught segfault *** address 0x200000be, cause 'memory not mapped' Possible actions: 1: abort (with core dump, if enabled) 2: normal R exit 3: exit R without saving workspace 4: exit R saving workspace I now, i need to study and i know also for sure the answer is in some book (i have lot). I swear i read a lot and i'm still reading, but i really need help :) -- View this message in context: http://r.789695.n4.nabble.com/Crash-cause-memory-not-mapped-tp4649141.html Sent from the R devel mailing list archive at Nabble.com.
I'm not an expert, but from what I know you should certainly use the .Call interface when you define a function as you did. The problem is that your function must return a value (of type SEXP) which it does not. If you don't return a value, all bets are off as to what will happen, and if the internal R code uses a pointer to the result of your function, you can easily get memory map errors. HTH, Peter On Fri, Nov 9, 2012 at 2:31 PM, niandra <gianluca.mastrantonio at yahoo.it> wrote:> i'm using the following c++ code > using namespace std; > #include <iostream> > #include <stdio.h> > #include <opencv/cv.h> > #include <opencv2/core/core.hpp> > #include <opencv2/highgui/highgui.hpp> > #include <opencv/highgui.h> > #include <opencv/cv.h> > #include <R.h> > #include <Rinternals.h> > #include <Rmath.h> > > extern "C" { > SEXP FiltroGaus(SEXP size1_r, SEXP size2_r, SEXP sigma_r) { > > int size1 = INTEGER(size1_r)[0]; > int size2 = INTEGER(size2_r)[0]; > double sigma = REAL(sigma_r)[0]; > > } > } > > The compilation go without errors but when in R i type > .C("FiltroGaus",3,3,2) > the message is: Errore: INTEGER() can only be applied to a 'integer', not a > 'NULL' > if i type .C("FiltroGaus",as.integer(3),as.integer(3),as.double(2)) > the message is Errore: INTEGER() can only be applied to a 'integer', not a > 'closure' > > while if i type .Call("FiltroGaus",as.integer(3),as.integer(3),as.double(2)) > the message is > NULL > > *** caught segfault *** > address 0x200000be, cause 'memory not mapped' > > Possible actions: > 1: abort (with core dump, if enabled) > 2: normal R exit > 3: exit R without saving workspace > 4: exit R saving workspace > > > I now, i need to study and i know also for sure the answer is in some book > (i have lot). I swear i read a lot and i'm still reading, but i really need > help :) > > > > -- > View this message in context: http://r.789695.n4.nabble.com/Crash-cause-memory-not-mapped-tp4649141.html > Sent from the R devel mailing list archive at Nabble.com. > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel
the error "memory non mapped" happen also if i use void FiltroGaus(SEXP size1_r, SEXP size2_r, SEXP sigma_r) instead SEXP FiltroGaus(SEXP size1_r, SEXP size2_r, SEXP sigma_r) { Il giorno 09/nov/2012, alle ore 23:58, Peter Langfelder <peter.langfelder at gmail.com> ha scritto:> I'm not an expert, but from what I know you should certainly use the > .Call interface when you define a function as you did. The problem is > that your function must return a value (of type SEXP) which it does > not. If you don't return a value, all bets are off as to what will > happen, and if the internal R code uses a pointer to the result of > your function, you can easily get memory map errors. > > HTH, > > Peter > > On Fri, Nov 9, 2012 at 2:31 PM, niandra <gianluca.mastrantonio at yahoo.it> wrote: >> i'm using the following c++ code >> using namespace std; >> #include <iostream> >> #include <stdio.h> >> #include <opencv/cv.h> >> #include <opencv2/core/core.hpp> >> #include <opencv2/highgui/highgui.hpp> >> #include <opencv/highgui.h> >> #include <opencv/cv.h> >> #include <R.h> >> #include <Rinternals.h> >> #include <Rmath.h> >> >> extern "C" { >> SEXP FiltroGaus(SEXP size1_r, SEXP size2_r, SEXP sigma_r) { >> >> int size1 = INTEGER(size1_r)[0]; >> int size2 = INTEGER(size2_r)[0]; >> double sigma = REAL(sigma_r)[0]; >> >> } >> } >> >> The compilation go without errors but when in R i type >> .C("FiltroGaus",3,3,2) >> the message is: Errore: INTEGER() can only be applied to a 'integer', not a >> 'NULL' >> if i type .C("FiltroGaus",as.integer(3),as.integer(3),as.double(2)) >> the message is Errore: INTEGER() can only be applied to a 'integer', not a >> 'closure' >> >> while if i type .Call("FiltroGaus",as.integer(3),as.integer(3),as.double(2)) >> the message is >> NULL >> >> *** caught segfault *** >> address 0x200000be, cause 'memory not mapped' >> >> Possible actions: >> 1: abort (with core dump, if enabled) >> 2: normal R exit >> 3: exit R without saving workspace >> 4: exit R saving workspace >> >> >> I now, i need to study and i know also for sure the answer is in some book >> (i have lot). I swear i read a lot and i'm still reading, but i really need >> help :) >> >> >> >> -- >> View this message in context: http://r.789695.n4.nabble.com/Crash-cause-memory-not-mapped-tp4649141.html >> Sent from the R devel mailing list archive at Nabble.com. >> >> ______________________________________________ >> R-devel at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel
On 9 November 2012 at 14:31, niandra wrote: | extern "C" { | SEXP FiltroGaus(SEXP size1_r, SEXP size2_r, SEXP sigma_r) { [...] | The compilation go without errors but when in R i type | .C("FiltroGaus",3,3,2) You missed the part in "Writing R Extension" about .C() and .Call() arguments. You are mixing both approaches here, which usually ends badly. Do some more reading, and maybe study some existing (simpler) examples / packages. You really do not need to engage OpenCV headers and libraries before you understand the basics better. Dirk -- Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
Apparently Analagous Threads
- unable to load shared object - opencv
- [LLVMdev] Running cross compiled binaries for ARM on gem5
- [LLVMdev] Running cross compiled binaries for ARM on gem5
- [LLVMdev] Running cross compiled binaries for ARM on gem5
- [LLVMdev] Running cross compiled binaries for ARM on gem5