[R-br] Fortran 90 + R: como carregar a dll
Cleber N.Borges
klebyn em yahoo.com.br
Quarta Outubro 2 20:16:37 BRT 2013
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
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20131002/5029268e/attachment.html>
Mais detalhes sobre a lista de discussão R-br