The C wrappers are there to align the linking conventions expected by the Fortran compiler (usually subroutine/function foo has its entry point in the object file indicated by a symbol foo_, but it depends on the platform) to that of the C compiler. (The C compiler just uses the function name.) The wrappers give C functions named whatever is appropriate (eg "foo_") to get an entry point that "call foo" will trigger linking to.
Calling the Fortran subroutine from R is via .Fortran() after doing a dyn.load() of the shared object file. Creating the shared object should just be a matter of R CMD SHLIB file1.c file2.f but I've never tried using Fortran and C together. Take a look at the magic built in to the R CMD SHLIB and R CMD COMPILE commands, and at some of the packages that come with R (I just do a "find" for "*.f" in the src tree) if you need examples, eg. src/library/stats. Reid Huntsinger -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Gilles GUILLOT Sent: Tuesday, June 14, 2005 1:05 PM To: R-devel@stat.math.ethz.ch Subject: [Rd] Calling C from Fortran I would like to call C routines from Fortran under linux as suggested in section 5.6 of the "Writing R extensions" documentation. I'm familiar with Fortran but not with C. I understand the example provided in Fortran: subroutine testit() double precision normrnd, x call rndstart() x = normrnd() call dblepr("X was", 5, x, 1) call rndend() end but I don't understand the purpose of this C wrapper: #include <R.h> void F77_SUB(rndstart)(void) { GetRNGstate(); } void F77_SUB(rndend)(void) { PutRNGstate(); } double F77_SUB(normrnd)(void) { return norm_rand(); } neither how I should compile it. Could anyone explain how I should compile and link the C and Fortran files above, and call the Fortran subroutine from R. Thanks, Gilles ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel