[R] building a Win32 DLL with R objects?
Jeff D. Hamann
jeff_hamann at hamanndonald.com
Tue May 20 23:27:11 CEST 2003
I've been attemping to create a test dll that contains R objects (actually I
simply copied the code from the "Writing R extensions") and got it to build
the dll using rcmd shlib main.c (okay, it's simple, but effective). Here's
the info so far:
this is the contents of the main.c file (not there's no WinMain()). Do we
put it in or does the script do it when we compile?
/* this is a test for the r package to access r objects from a c lib */
SEXP test_function( SEXP a, SEXP b )
PROTECT( a = AS_NUMERIC( a ) );
PROTECT( b = AS_NUMERIC( b ) );
warning( "you're now in test_function\n" );
na = LENGTH( a );
nb = LENGTH( b );
nab = na + nb - 1;
PROTECT( nab = AS_NUMERIC( nab ) );
xa = NUMERIC_POINTER( a );
xb = NUMERIC_POINTER( b );
xab = NUMERIC_POINTER( ab );
UNPROTECT( 3 );
I built the dll using the "rcmd shlib main.c" and a dll pops out in the end.
Yeah for me! Now, I tried to call my function using:
## this is a simple r program to demonstrate how to
## call openfvs functions....
x <- c( 1, 2.3568, 3.14159 )
y <- c( -568.89234, 4, 3234.23424 )
conv <- function( a, b ) .Call( "test_function", a, b )
and I'm not sure the DLL actually getting loaded? I've been able to step
through other DLL projects I call from R, but none that use the R libraries.
When I run the script from the terminal (using rterm.exe), R just sits there
as if stuck in a loop and nothing happens. I would like to be able to step
through this using the visual studio debugger but haven't been able to
figure out how to build R DLLs using something other than the RCMD SHLIB.
WHen I try to compile a project, similar to my other projects I've been
calling from R, I get the following linker errors:
main.obj : error LNK2001: unresolved external symbol _Rf_unprotect
main.obj : error LNK2001: unresolved external symbol _REAL
main.obj : error LNK2001: unresolved external symbol _LENGTH
main.obj : error LNK2001: unresolved external symbol _Rf_warning
main.obj : error LNK2001: unresolved external symbol _Rf_protect
main.obj : error LNK2001: unresolved external symbol _Rf_coerceVector
Debug/rdll_test.dll : fatal error LNK1120: 6 unresolved externals
Error executing link.exe.
rdll_test.dll - 7 error(s), 6 warning(s)
And I can't find the lib file I should be including. Is there one or am I
barking up the wrong tree?
More information about the R-help