<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<font face="Courier New, Courier, monospace">olá a todos,<br>
<br>
estou tentando aprender o básico de como construir um código em
Fortran<br>
e usá-lo no R.<br>
<br>
Para tanto, criei o segundo código em Fortran:<br>
</font><font face="Courier New, Courier, monospace"><font
face="Courier New, Courier, monospace">------------------------------------------------------------------------------------------------<br>
</font> subroutine contador<br>
! Compilar como DLL para uso no R<br>
implicit none<br>
integer n, i<br>
integer, allocatable :: r(:)<br>
read *, n<br>
allocate( r(n) )<br>
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!<br>
do i = 1, n<br>
r(i) = i<br>
enddo<br>
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!<br>
end subroutine</font><br>
<font face="Courier New, Courier, monospace"><font face="Courier
New, Courier, monospace">------------------------------------------------------------------------------------------------<br>
</font><br>
No prompt do DOS, eu fui tentar usar o comando: R CMD SHLIB
contador.f90<br>
e obtive o seguinte erro:<br>
<br>
------------------------------------------------------------------------------------------------<br>
C:\Users\CLEBER\Documents\code\contador>R CMD SHLIB
contador.f90<br>
C:/R/etc/x64/Makeconf:196: warning: overriding commands for target
`.m.o'<br>
C:/R/etc/x64/Makeconf:189: warning: ignoring old commands for
target `.m.o'<br>
gfortran -m64 -O2 -mtune=core2 -c contador.f90 -o contador.o<br>
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<br>
/usr/bin/sh: line 8: gfortran -m64: command not found<br>
------------------------------------------------------------------------------------------------<br>
<br>
não entendi o motivo do erro...<br>
<br>
Gostaria de alguma ajuda nesse Ponto (1) <- ***<br>
<br>
Contornei o problema "Copiando & Colando" os comandos no
prompt.<br>
<br>
O arquivo * tmp.def * não existe... mas <br>
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*<br>
<br>
+++++++++++++++++++++++++++++<br>
o conteúdo de def é apenas:<br>
EXPORTS<br>
contador_ @1<br>
+++++++++++++++++++++++++++++<br>
<br>
------------------------------------------------------------------------------------------------<br>
gfortran -m64 -O2 -mtune=core2 -c contador.f90 -o contador.o<br>
gfortran -m64 -shared -s -static-libgcc -o contador.dll tmp.def
contador.o -Ld:/RCompile/CRANpkANpkg/extralibs64/local/lib
-LC:/R/bin/x64 -lR<br>
------------------------------------------------------------------------------------------------<br>
<br>
Após os comandos acima é gerado o arquivo contador.dll<br>
<br>
No R, eu fui tentar carregar a dll, assim:<br>
<br>
> <br>
> dyn.load('contador.dll')<br>
> <br>
> dlls <- getLoadedDLLs()<br>
> dlls<br>
Filename
Dynamic.Lookup<br>
base
base FALSE<br>
utils
C:/R/library/utils/libs/x64/utils.dll FALSE<br>
methods
C:/R/library/methods/libs/x64/methods.dll FALSE<br>
grDevices
C:/R/library/grDevices/libs/x64/grDevices.dll FALSE<br>
graphics
C:/R/library/graphics/libs/x64/graphics.dll FALSE<br>
stats
C:/R/library/stats/libs/x64/stats.dll FALSE<br>
contador
C:/Users/CLEBER/Documents/code/contador/contador.dll
TRUE<br>
> <br>
> getDLLRegisteredRoutines('contador')<br>
data frame with 0 columns and 0 rows<br>
> <br>
><br>
<br>
Porém não há registro da subrotina 'contador'... :-(<br>
<br>
<br>
Usei o comando: .Fortran('contador_', n=as.integer( 10 ) )<br>
<br>
mas daí trava o R.<br>
<br>
<br>
Se alguém puder me ajudar a entender isso, agradeço desde já.<br>
<br>
<br>
cleber<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
</font>
</body>
</html>