Werner, Extension .C is for C++ code, not C code. Please use the extension .c.
The problem is C++ name mangling. Brian On Tue, 28 Mar 2006, Werner Stuetzle wrote: > > I am trying to compile a C function and make a dll using MinGW. I > installed MinGW, Perl, the Murdoch-Sutherland tool collection, and then I > proceed as in "R for Windows FAQ" Section 8. > > Here is my C function: > ---------------------------------------------------------------------- > /* C function adding two vectors (5-26-05) */ > > #include<stdlib.h> > > EXPORT void addvectors(double *a, double *b, int *n, double *sum) { > int i; > for (i = 0; i < *n; i++) { > sum[i] = a[i] + b[i]; > } > } > ---------------------------------------------------------------------- > > Here is my command to make the dll and the output: > > ---------------------------------------------------------------------- > z:/Stat534/Spring06/Website/Link-C-R $ c:/Progra~1/R/R-2.2.1/bin/R CMD > SHLIB add-vectors.C > making add-vectors.d from add-vectors.C > g++ -Ic:/Progra~1/R/R-2.2.1/include -Wall -O2 -c add-vectors.C -o > add-vectors.o > ar cr add-vectors.a add-vectors.o > ranlib add-vectors.a > g++ --shared -s -o add-vectors.dll add-vectors.def add-vectors.a > -Lc:/Progra~1/R/R-2.2.1/src/gnuwin32 -lg2c -lR > ---------------------------------------------------------------------- > > I get "add-vectors.dll". Here is the R code to load the dll and add two > vectors: > > ---------------------------------------------------------------------- > dll.filename <- > "z:\\Stat534\\Spring06\\Website\\Link-C-R\\add-vectors.dll" > > dyn.load(dll.filename) > > ## If the DLL needs to be re-built, it has to be unloaded first. > ## dyn.unload(dll.filename) > > > addvectors <- function(a, b) { > the.sum <- rep(0, length(a)) > res <- .C("addvectors", as.double(a), as.double(b), as.integer(length(a)), > as.double(the.sum)) > return(res[[4]]) > } > > a <- c(1,2,3) > b <- c(4,5,6) > addvectors(a, b) > ---------------------------------------------------------------------- > > Here is what I get when I use addvectors: > > ---------------------------------------------------------------------- >> addvectors(a, b) > Error in .C("addvectors", as.double(a), as.double(b), as.integer(length(a)), > : > C entry point "addvectors" not in load table > ---------------------------------------------------------------------- > > > What am I doing wrong? > > Thanks a lot, W > > > ---------------------------------------------------------------------- > Werner Stuetzle (206) 685-7431 (w) > Professor, Statistics (206) 685-7419 (fax) > Adjunct Professor, CSE [EMAIL PROTECTED] > Director, ACMS www.stat.washington.edu/wxs > Department of Statistics, Box 354322 Office: Padelford B305 > University of Washington > Seattle, WA 98195-4322 > > ______________________________________________ > R-help@stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html > -- Brian D. Ripley, [EMAIL PROTECTED] 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 ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html