<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">Oi Cleber, <br>
<br>
Nao sei qual foi o problema. So' gostaria de questionar: porque
voce esta lendo o tamanho do vetor? <br>
<br>
Ate onde sei, e' melhor declarar objetos no R e passa-los a
subrotina. No seu caso, poderia ser <br>
<br>
<br>
subroutine contador(n,r)<br>
! Compilar como dynamic library para uso no R<br>
integer n, i<br>
integer r(n)<br>
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!<br>
do i = 1, n<br>
r(i) = i<br>
enddo<br>
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!<br>
end subroutine<br>
<br>
e para mim funcionou bem (em Linux, of course) :)<br>
<br>
On 10/03/2013 01:16 AM, Cleber N.Borges wrote:<br>
</div>
<blockquote cite="mid:524CA955.9010605@yahoo.com.br" type="cite">
<meta http-equiv="content-type" content="text/html;
charset=ISO-8859-1">
<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> <br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
R-br mailing list
<a class="moz-txt-link-abbreviated" href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a>
<a class="moz-txt-link-freetext" href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a>
Leia o guia de postagem (<a class="moz-txt-link-freetext" href="http://www.leg.ufpr.br/r-br-guia">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.</pre>
</blockquote>
<br>
</body>
</html>