[R-br] Fortran 90 + R: como carregar a dll

Elias T Krainski eliaskrainski em yahoo.com.br
Quinta Outubro 3 04:57:37 BRT 2013


Oi Cleber,

Nao sei qual foi o problema. So' gostaria de questionar: porque voce 
esta lendo o tamanho do vetor?

Ate onde sei, e' melhor declarar objetos no R e passa-los a subrotina. 
No seu caso, poderia ser


         subroutine contador(n,r)
         ! Compilar como dynamic library para uso no R
         integer n, i
         integer r(n)
         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
         do i = 1, n
             r(i) = i
         enddo
         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
         end subroutine

e para mim funcionou bem (em Linux, of course) :)

On 10/03/2013 01:16 AM, Cleber N.Borges wrote:
> olá a todos,
>
> estou tentando aprender o básico de como construir um código em Fortran
> e usá-lo no R.
>
> Para tanto, criei o segundo código em Fortran:
> ------------------------------------------------------------------------------------------------
>         subroutine contador
>         ! Compilar como DLL para uso no R
>         implicit none
>         integer n, i
>         integer, allocatable :: r(:)
>         read *, n
>         allocate( r(n) )
>         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
>         do i = 1, n
>             r(i) = i
>         enddo
>         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
>         end subroutine
> ------------------------------------------------------------------------------------------------
>
> No prompt do DOS, eu fui tentar usar o comando:  R CMD SHLIB contador.f90
> e obtive o seguinte erro:
>
> ------------------------------------------------------------------------------------------------
> C:\Users\CLEBER\Documents\code\contador>R CMD SHLIB contador.f90
> C:/R/etc/x64/Makeconf:196: warning: overriding commands for target `.m.o'
> C:/R/etc/x64/Makeconf:189: warning: ignoring old commands for target 
> `.m.o'
> gfortran -m64   -O2  -mtune=core2 -c  contador.f90 -o contador.o
> gfortran -m64 -shared -s -static-libgcc -o contador.dll tmp.def 
> contador.o -Ld:/RCompile/CRANpkg/extralibs64/local/lib/x64 
> -Ld:/RCompile/CRANpkg/extralibs64/local/lib  -LC:/R/bin/x64 -lR
> /usr/bin/sh: line 8: gfortran -m64: command not found
> ------------------------------------------------------------------------------------------------
>
> não entendi o motivo do erro...
>
> Gostaria de alguma ajuda nesse Ponto (1) <- ***
>
> Contornei o problema "Copiando & Colando" os comandos no prompt.
>
> O arquivo * tmp.def * não existe... mas
> então eu o criei por que havia compilado anteriormente com a IDE Code 
> Blocks, e sabia da existência de um fulano *libcontador.def*
>
> +++++++++++++++++++++++++++++
> o conteúdo de def é apenas:
> EXPORTS
>     contador_ @1
> +++++++++++++++++++++++++++++
>
> ------------------------------------------------------------------------------------------------
> gfortran -m64 -O2 -mtune=core2 -c contador.f90 -o contador.o
> gfortran -m64 -shared -s -static-libgcc -o contador.dll tmp.def 
> contador.o -Ld:/RCompile/CRANpkANpkg/extralibs64/local/lib 
> -LC:/R/bin/x64 -lR
> ------------------------------------------------------------------------------------------------
>
> Após os comandos acima é gerado o arquivo contador.dll
>
> No R, eu fui tentar carregar a dll, assim:
>
> >
> > dyn.load('contador.dll')
> >
> > dlls <- getLoadedDLLs()
> > dlls
>                                                       Filename 
> Dynamic.Lookup
> base base          FALSE
> utils C:/R/library/utils/libs/x64/utils.dll          FALSE
> methods C:/R/library/methods/libs/x64/methods.dll          FALSE
> grDevices C:/R/library/grDevices/libs/x64/grDevices.dll          FALSE
> graphics C:/R/library/graphics/libs/x64/graphics.dll          FALSE
> stats C:/R/library/stats/libs/x64/stats.dll          FALSE
> contador C:/Users/CLEBER/Documents/code/contador/contador.dll TRUE
> >
> > getDLLRegisteredRoutines('contador')
> data frame with 0 columns and 0 rows
> >
> >
>
> Porém não há registro da subrotina 'contador'... :-(
>
>
> Usei o comando:   .Fortran('contador_', n=as.integer( 10 ) )
>
> mas daí trava o R.
>
>
> Se alguém puder me ajudar a entender isso, agradeço desde já.
>
>
> cleber
>
>
>
>
>
>
>
>
>
>
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20131003/52403fb3/attachment.html>


Mais detalhes sobre a lista de discussão R-br