I installed RTools - though I'm unable to use it within R, from the 
command prompt the file will compile and create the foo.dll using R CMD 
SHLIB foo.f.  I simlified to code for fortran IV (?really) compliance

foo.f:

        Subroutine foo(x)
        real x
        x = x + 2.
        return
        end

R CMD SHLIB foo.f
cygwin warning:
   MS-DOS style path detected: d:/PROGRA~1/r/R-214~1.1/etc/i386/Makeconf
   Preferred POSIX equivalent is: 
/cygdrive/d/PROGRA~1/r/R-214~1.1/etc/i386/Makeconf
   CYGWIN environment variable option "nodosfilewarning" turns off this 
warning.
   Consult the user's guide for more details about POSIX paths:
     http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
gfortran      -O3  -mtune=core2 -c foo.f -o foo.o
gcc -shared -s -static-libgcc -o foo.dll tmp.def foo.o 
-Ld:/RCompile/CRANpkg/extralibs/local/lib/i386 
-Ld:/RCompile/CRANpkg/extralibs/local/lib -lgfortran 
-Ld:/PROGRA~1/r/R-214~1.1/bin/i386 -lR

Now the issue is getting it to dyn.load("foo.dll"). I'm greeted with

Error in inDL(x, as.logical(local), as.logical(now), ...) :
   unable to load shared object 'd:/Fortran folders/Fortran 
Multiresponse/foo.dll':
   LoadLibrary failure:  %1 is not a valid Win32 application.

Any thoughts?

David S

On 1/15/2012 5:09 PM, Duncan Murdoch wrote:
> 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

-- 
David K Stevens, P.E., Ph.D., Professor
Civil and Environmental Engineering
Utah Water Research Laboratory
8200 Old Main Hill
Logan, UT  84322-8200
435 797 3229 - voice
435 797 1363 - fax
david.stevens@usu.edu




	[[alternative HTML version deleted]]

