On 15/11/2009 8:25 PM, nabble.30.miller_2...@spamgourmet.com wrote:
On Sun, Nov 15, 2009 at 2:52 PM, Duncan Murdoch -
nabble.30.miller_2...@spamgourmet.com
<>
wrote:
On 15/11/2009 1:41 PM, nabble.30.miller_2...@spamgourmet.com wrote:
The "character" type in R corresponds to STRSXP in C, which is a vector of
CHARSXPs. So you need an extra step to get to the C string:
const char * omsg = CHAR(STRING_ELT(msg, 0));
Duncan Murdoch
Thank you for the suggestion. I have replaced the code as suggested,
but I had attempted this conversion earlier. Unfortunately, I still
receive the same segmentation fault (and backtrace). The underlying
problem no longer appears to relate to type conversion. The following
code represents the entirety of the extension's R and C code (and
NAMESPACE file), and still causes the segmentation fault:
NAMESPACE:
---------------------------------------------------
useDynLib("tstlib")
export( "ptest" )
ptest.R:
---------------------------------------------------
ptest <- function() { .Call("Rwrite", PACKAGE="tstlib");};
ptest.c:
---------------------------------------------------
#include <R.h>
void Rwrite() { printf("[%i] %s",12,"Hi"); }
I forget if you said which system you're working on, but it may be that
you don't have an open file handle for printf to use. Use Rprintf
instead and things should be fine.
Duncan Murdoch
ptest.R:
---------------------------------------------------
ptest <- function() { .Call("Rwrite", PACKAGE="tstlib");};
zzz.R:
---------------------------------------------------
.onLoad <- function(libname, pkgname)
{
}
.onUnload <- function(libpath) {
library.dynam.unload("forkex", libpath)
}
This is just about the most simple example I can think of, and don't
really know why it would segfault (if I change the interface in
ptest.R above from .Call to .C, no segfault occurs). The following is
the output from `R CMD SHLIB ptest.c`:
gcc -m64 -std=gnu99 -I/usr/include/R -I/usr/local/include -fpic
-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions
-fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -c
ptest.c -o ptest.o
gcc -m64 -std=gnu99 -shared -L/usr/local/lib64 -o ptest.so ./ptest.o
-L/usr/lib64/R/lib -lR
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel