[R] R CMD SHLIB changes function name when compiling

Steve Pederson stephen.pederson at adelaide.edu.au
Fri Oct 8 16:47:31 CEST 2010


Hi Prof Ripley,

Thanks for the response & the use of the correct terminology. I've 
checked the environment variables & there is none set called CC.

The .dll was definitely compiled using R CMD SHLIB. I'm not quite sure 
what output you're referring to but at the command prompt when I enter:

...\bin> R CMD SHLIB summariseMCMC.C

I get the output:

g++ -I"C:/R/R-2.11.1/include"        -02 -Wall summariseMCMC.c 
summariseMCMC.o
g++ -shared -s -static-libgcc -o summariseMCMC.dll tmp.def 
summariseMCMC.0 -LC:/R/R-2.11.1/bin -1R

Please let me know if I can try anything different provide any more 
useful output.

Another source file I have (runUniformMCMC.C) compiles & runs perfectly 
using the same approach, so I'm rather perplexed as to why this one gets 
it's name mangled. It originally had actual code in it that did useful 
things, but I stripped it back while I was trying to figure out what is 
happening.

Thanks again,

Steve


On 8/10/2010 8:06 PM, Prof Brian Ripley wrote:
> 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.
>>
>



More information about the R-help mailing list