[R] Calling Fortran from R: Issues with dynamic loading of fortran dll

Duncan Murdoch murdoch.duncan at gmail.com
Mon Jan 16 01:09:12 CET 2012


On 12-01-15 5:34 PM, David Stevens wrote:
> I successfully used .Fortran to load and execute my fortran procedures
> under WinXP and 32 bit R. Alas, the same isn't true with my next Windows
> 7/64 machine, R 2.14.1 (64 bit) and the gnu gfortran (64) compiler
> (mingw64 v. 4.6.1). Though I'm able to compile the routines from the
> command line using gfortran '...', .Fortran('foo2') results in an error
> saying the Fortran symbol name "foo2" not in load table.
>
> foo.f90:
>
> Module foo
> contains
>    Subroutine foo2(x)
>
>      real(kind=8),intent(inout) :: x
>      x = x + 2
>
> end subroutine foo2
>
> end module foo
>
> c:\mingw64\bin\gfortran --shared -Wall -pedantic -g -o foo.dll foo.f90
>
> ff = "d:/Fortran folders/Fortran Multiresponse/foo.dll"
> x= dyn.load(ff)
> .Fortran('foo2',as.double(1))
>
> Error in .Fortran("foo", as.double(1)) :
>     Fortran symbol name "foo" not in load table
>
> Can someone point me in the direction of a solution?

Some or all of these might help:

1.  Get R to do the compiling for you:  it knows the compiler arguments 
that produce compatible code.  (Use R CMD shlib for this.)

2.  Use a compiler supplied with the Rtools collection.

3.  Find out what name got exported, and use .C instead of .Fortran to 
call that.

Duncan Murdoch



More information about the R-help mailing list