<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix">obrigado Elias pelo help,<br>
<br>
compilei o codigo com sua modificação.<br>
Não gera nenhum erro porém gera um resultado absurdo aqui na minha
máquina.<br>
<br>
Reproduza abaixo:<br>
############################################<br>
<br>
> system("gfortran -m64 -O2 -mtune=core2 -c contador.f90 -o
contador.o")<br>
> system("gfortran -m64 -shared -s -static-libgcc -o
contador.dll contador.o")<br>
> dyn.load('contador.dll')<br>
> is.loaded('contador')<br>
[1] TRUE<br>
> <br>
> getNativeSymbolInfo('contador')<br>
$name<br>
[1] "contador"<br>
<br>
$address<br>
<pointer: 0x00000000100c1450><br>
attr(,"class")<br>
[1] "NativeSymbol"<br>
<br>
$package<br>
NULL<br>
<br>
attr(,"class")<br>
[1] "NativeSymbolInfo"<br>
> <br>
> <br>
> .Fortran('contador', n=as.integer(5), r=numeric(5))<br>
$n<br>
[1] 5<br>
<br>
$r<br>
[1] 8.487983e-314 3.395193e-313 1.235164e-322 0.000000e+00
0.000000e+00<br>
<br>
> <br>
<br>
obrigado novamente<br>
cleber<br>
<br>
<br>
<br>
Em 03/10/2013 04:57, Elias T Krainski escreveu:<br>
</div>
<blockquote cite="mid:524D2371.3000007@yahoo.com.br" type="cite">
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
<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>
</font><br>
</blockquote>
</blockquote>
</body>
</html>