<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>