Hi, I'm trying to write a function in C for implementation with .Call. When compiling using R CMD SHLIB characters seem to be added to the function name. Here's the complete C code from the file summariseMCMC.c: #include<R.h> #include<Rdefines.h> #include<Rinternals.h> void summariseMCMC(SEXP data) { PROTECT(data=AS_NUMERIC(data)); UNPROTECT(1); } Then after compiling (R CMD SHLIB summariseMCMC.c) & loading the .dll dyn.load("C:/R/R-2.11.1/bin/summariseMCMC.dll") is.loaded("_Z13summariseMCMCP7SEXPREC") [1] TRUE is.loaded("summariseMCMC") [1] FALSE Just wondering if anyone had any pointers for getting rid of this, or have I missed something outrageously obvious? Thanks, Steve sessionInfo() R version 2.11.1 (2010-05-31) i386-pc-mingw32 locale: [1] LC_COLLATE=English_Australia.1252 LC_CTYPE=English_Australia.1252 [3] LC_MONETARY=English_Australia.1252 LC_NUMERIC=C [5] LC_TIME=English_Australia.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] limma_3.4.4 Biobase_2.8.0 aroma.affymetrix_1.7.0 [4] aroma.apd_0.1.7 affxparser_1.20.0 R.huge_0.2.0 [7] aroma.core_1.7.0 aroma.light_1.16.0 matrixStats_0.2.1 [10] R.rsp_0.3.6 R.cache_0.3.0 R.filesets_0.8.3 [13] digest_0.4.2 R.utils_1.4.4 R.oo_1.7.3 [16] R.methodsS3_1.2.0 loaded via a namespace (and not attached): [1] tools_2.11.1
Prof Brian Ripley
2010-Oct-08 09:36 UTC
[R] R CMD SHLIB changes function name when compiling
On Fri, 8 Oct 2010, Steve Pederson wrote:> Hi, > > I'm trying to write a function in C for implementation with .Call. When > compiling using R CMD SHLIB characters seem to be added to the function name. > > Here's the complete C code from the file summariseMCMC.c: > > #include<R.h> > #include<Rdefines.h> > #include<Rinternals.h> > > void summariseMCMC(SEXP data) { > > PROTECT(data=AS_NUMERIC(data)); > UNPROTECT(1); > > } > > Then after compiling (R CMD SHLIB summariseMCMC.c) & loading the .dll > > dyn.load("C:/R/R-2.11.1/bin/summariseMCMC.dll") > is.loaded("_Z13summariseMCMCP7SEXPREC") > [1] TRUE > is.loaded("summariseMCMC") > [1] FALSE > > Just wondering if anyone had any pointers for getting rid of this, or have I > missed something outrageously obvious?You have. This was not done by'R CMD SHLIB', but by a C++ compiler -- it is called 'name mangling'. Unfortunately you didn't show us the output from that command, when the cause would probably have been 'outrageously obvious'. The fix is to make sure you use a C compiler to compile C code, and we've almost no idea why that is not being done on your system. But as a guess, check that the environment variable CC is not set.> > Thanks, > > Steve > > > sessionInfo() > R version 2.11.1 (2010-05-31) > i386-pc-mingw32 > > locale: > [1] LC_COLLATE=English_Australia.1252 LC_CTYPE=English_Australia.1252 > [3] LC_MONETARY=English_Australia.1252 LC_NUMERIC=C > [5] LC_TIME=English_Australia.1252 > > attached base packages: > [1] stats graphics grDevices utils datasets methods base > > other attached packages: > [1] limma_3.4.4 Biobase_2.8.0 aroma.affymetrix_1.7.0 > [4] aroma.apd_0.1.7 affxparser_1.20.0 R.huge_0.2.0 > [7] aroma.core_1.7.0 aroma.light_1.16.0 matrixStats_0.2.1 > [10] R.rsp_0.3.6 R.cache_0.3.0 R.filesets_0.8.3 > [13] digest_0.4.2 R.utils_1.4.4 R.oo_1.7.3 > [16] R.methodsS3_1.2.0 > > loaded via a namespace (and not attached): > [1] tools_2.11.1 > > ______________________________________________ > R-help at r-project.org 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. >-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595