Dear Gilles,
You can try this.
Save the fortran file as 1.f
Save the C file as 2.c
Then
R CMD SHLIB 1.f 2.c
You should obtain a file named 1.so.
Then start you R program, then
dyn.load('/where/is/your/1.so')
.Fortran("testit")
You should obtain a random number which is normally distributed.
Good luck.
Jin
On 6/15/05, Gilles GUILLOT <gilles.guillot at inapg.inra.fr>
wrote:> I would like to call C routines from Fortran 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-help at 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
>