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.stev...@usu.edu [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.