Thanks for your email. I try to change the name in lowercase but it conflicts with a C implementation also named halton. So I rename the C function halton2() and sobol2() while the Fortran function are HALTON() and SOBOL() (I also try lower case in the Fortran code). Unfortunately, it does not help since I get init.c:97:25: error: use of undeclared identifier 'halton_'; did you mean 'halton2'? {"halton", (DL_FUNC) &F77_SUB(halton), 7}, My current solution is to comment FortEntries array and use R_useDynamicSymbols(dll, TRUE) for a dynamic search of Fortran routines. Regards, Christophe --------------------------------------- Christophe Dutang LMM, UdM, Le Mans, France web: http://dutangc.free.fr <http://dutangc.free.fr/>> Le 9 mai 2017 ? 14:32, Berend Hasselman <bhh at xs4all.nl> a ?crit : > > >> On 9 May 2017, at 13:44, Christophe Dutang <dutangc at gmail.com> wrote: >> >> Dear list, >> >> I?m trying to register Fortran routines in randtoolbox (in srt/init.c file), see https://r-forge.r-project.org/scm/viewvc.php/pkg/randtoolbox/src/init.c?view=markup&root=rmetrics. >> >> Reading https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Registering-native-routines and looking at what is done in stats package, I first thought that the following code will do the job: >> >> static const R_FortranMethodDef FortEntries[] = { >> {"halton", (DL_FUNC) &F77_NAME(HALTON), 7}, >> {"sobol", (DL_FUNC) &F77_NAME(SOBOL), 11}, >> {NULL, NULL, 0} >> }; >> >> But I got error messages when building : use of undeclared identifier ?SOBOL_?. I also tried in lower case sobol and halton. >> >> Looking at expm package https://r-forge.r-project.org/scm/viewvc.php/pkg/src/init.c?view=markup&revision=94&root=expm, I try >> >> static const R_FortranMethodDef FortEntries[] = { >> {"halton", (DL_FUNC) &F77_SUB(HALTON), 7}, >> {"sobol", (DL_FUNC) &F77_SUB(SOBOL), 11}, >> {NULL, NULL, 0} >> }; >> >> But the problem remains the same. >> >> Is there a way to have header file for Fortran codes? how to declare routines defined in my Fortran file src/LowDiscrepancy.f? >> > > lowercase routine names? manual does mention that. > > Berend Hasselman > > >> Any help appreciated >> >> Regards, Christophe >> --------------------------------------- >> Christophe Dutang >> LMM, UdM, Le Mans, France >> web: http://dutangc.free.fr >> >> ______________________________________________ >> R-devel at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >[[alternative HTML version deleted]]
Christophe,> On 10 May 2017, at 08:08, Christophe Dutang <dutangc at gmail.com> wrote: > > Thanks for your email. > > I try to change the name in lowercase but it conflicts with a C implementation also named halton. So I rename the C function halton2() and sobol2() while the Fortran function are HALTON() and SOBOL() (I also try lower case in the Fortran code). Unfortunately, it does not help since I get > > init.c:97:25: error: use of undeclared identifier 'halton_'; did you mean 'halton2'? > {"halton", (DL_FUNC) &F77_SUB(halton), 7}, > > My current solution is to comment FortEntries array and use R_useDynamicSymbols(dll, TRUE) for a dynamic search of Fortran routines.Have a look at my package geigen and its init.c. Could it be that you are missing extern declarations for the Fortran routines? Berend
Have you tried using tools:::package_native_routine_registration_skeleton()? If you don't like its output, you can easily edit its results and still avoid most pitfalls. Cheers, Jari Oksanen ________________________________________ From: R-devel <r-devel-bounces at r-project.org> on behalf of Berend Hasselman <bhh at xs4all.nl> Sent: 10 May 2017 09:48 To: Christophe Dutang Cc: r-devel at r-project.org Subject: Re: [Rd] registering Fortran routines in R packages Christophe,> On 10 May 2017, at 08:08, Christophe Dutang <dutangc at gmail.com> wrote: > > Thanks for your email. > > I try to change the name in lowercase but it conflicts with a C implementation also named halton. So I rename the C function halton2() and sobol2() while the Fortran function are HALTON() and SOBOL() (I also try lower case in the Fortran code). Unfortunately, it does not help since I get > > init.c:97:25: error: use of undeclared identifier 'halton_'; did you mean 'halton2'? > {"halton", (DL_FUNC) &F77_SUB(halton), 7}, > > My current solution is to comment FortEntries array and use R_useDynamicSymbols(dll, TRUE) for a dynamic search of Fortran routines.Have a look at my package geigen and its init.c. Could it be that you are missing extern declarations for the Fortran routines? Berend ______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
> On 10 May 2017, at 08:48, Berend Hasselman <bhh at xs4all.nl> wrote: > > Christophe, > >> On 10 May 2017, at 08:08, Christophe Dutang <dutangc at gmail.com> wrote: >> >> Thanks for your email. >> >> I try to change the name in lowercase but it conflicts with a C implementation also named halton. So I rename the C function halton2() and sobol2() while the Fortran function are HALTON() and SOBOL() (I also try lower case in the Fortran code). Unfortunately, it does not help since I get >> >> init.c:97:25: error: use of undeclared identifier 'halton_'; did you mean 'halton2'? >> {"halton", (DL_FUNC) &F77_SUB(halton), 7}, >> >> My current solution is to comment FortEntries array and use R_useDynamicSymbols(dll, TRUE) for a dynamic search of Fortran routines. > > Have a look at my package geigen and its init.c. > Could it be that you are missing extern declarations for the Fortran routines?I ran a development version of R some time ago with this tools:::package_native_routine_registration_skeleton("geigen",con="./geigen_report.txt") to generate a skeleton init.c. I used that without modification. Berend