data-ploner Meinhard Ploner
2006-Aug-19 12:30 UTC
[R] problem with Rcmd check and fortran95, makefile
Hi all, I have Win XP and R 2.3.1 on my notebook. I would like to write a package which includes some Fortran 95 code. Interestingly, if I compile and link the simple file test90.f90 directly with g95 -c test90.f90 g95 -shared -o test90.dll test90.o then PE Viewer ( a dll viewer) shows me the right functions in the export table, hence I can use the dll in R. But as it should become part of a package I wrote the simple src/Makefile F95=g95 prog: test90.f90 $(F95) -shared -o test90.dll test90.o test90.f90: test90.f90 $(F95) -c test90.f90 which looks totally equal to the 2 commands above. If I run now Rcmd check --no-latex test90 Rcmd install test90 then test90.dll is made but the export table is empty and therefore in R the functions cannot be loaded. Any idea? Can it be that Rcmd gives further flags to the compiler/linker? Any hints appreciated Meinhard Ploner South Tyrol (Italy) PS The fortran file is simply: SUBROUTINE BLABLA(A) !DEC$ ATTRIBUTES DLLEXPORT :: blabla ### without this line the prob is the same :-( IMPLICIT DOUBLE PRECISION (A-H,O-Z) A=A+1 RETURN END SUBROUTINE BLABLA [[alternative HTML version deleted]]
Prof Brian Ripley
2006-Aug-19 15:05 UTC
[R] problem with Rcmd check and fortran95, makefile
First, this is off-topic for R-help (see the posting guide, including the non-use of HTML, please). Second, the appropriate list needs to see exactly what the output was when you did this. Remember R CMD SHLIB is a *make* facility, and quite possibly the objects were not remade after changes. And yes, R CMD INSTALL does more than your commands -- as you have the sources you can take a look, or even see what the output says. Here is a simple F95 example (using gcc pre-4.2.0) ---------- Making package testf95 ------------ adding build stamp to DESCRIPTION making DLL ... "c:/MinGW/bin/gfortran" -O3 -c cos90.f95 -o cos90.o windres --include-dir d:/R/svn/trunk/include -i testf95_res.rc -o testf95_res.o "c:/MinGW/bin/gfortran" -shared -s -o testf95.dll testf95.def cos90.o testf95_res.o -Ld:/R/svn/trunk/bin -lR Note the extras, including a .def file. If you use R 2.3.1 patched or R-devel you just don't need a Makefile and you can use standard Fortran 9X. On Sat, 19 Aug 2006, data-ploner Meinhard Ploner wrote:> Hi all, > > I have Win XP and R 2.3.1 on my notebook. I would like to write a package which includes some Fortran 95 code. Interestingly, if I compile and link the simple file test90.f90 directly with > > g95 -c test90.f90 > g95 -shared -o test90.dll test90.o > > then PE Viewer ( a dll viewer) shows me the right functions in the export table, hence I can use the dll in R. But as it should become part of a package I wrote the simple src/Makefile > > F95=g95 > prog: test90.f90 > $(F95) -shared -o test90.dll test90.o > test90.f90: test90.f90 > $(F95) -c test90.f90 > > which looks totally equal to the 2 commands above. If I run now > Rcmd check --no-latex test90 > Rcmd install test90 > > then test90.dll is made but the export table is empty and therefore in R the functions cannot be loaded. > Any idea? Can it be that Rcmd gives further flags to the compiler/linker? > > Any hints appreciated > Meinhard Ploner > > South Tyrol (Italy) > > > PS The fortran file is simply: > > SUBROUTINE BLABLA(A) > !DEC$ ATTRIBUTES DLLEXPORT :: blabla ### without this line the prob is the same :-( > IMPLICIT DOUBLE PRECISION (A-H,O-Z) > A=A+1 > RETURN > END SUBROUTINE BLABLAYou could use --export-all-symbols> [[alternative HTML version deleted]] > > ______________________________________________ > 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 > and provide commented, minimal, self-contained, reproducible code. >-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595