title: how to call a Fortran90 function included in a module in c++ code?
body: <p>I m including a fortran90 program that is not mine in my C++ project . </p>
  
  <p>In the first stept I try to call the function by their name_() and i get the error  "undefined reference to mp_mpi_cartesian_init_ "by dispalying the symbol of the obj file (using nm) i found that the function are called by their module as module_function_ so i add the module name and i Get the same problem but between fortran obj  such as "Constants.f90:(.text+0x36): undefined reference to __powi4i4"</p>
  
  <p>here is the c++ code :</p>
  
  <pre><code> #include &lt;iostream&gt;
   #include &lt;complex&gt;
  
  
   using namespace std;
  
   extern"C" {
  
          void  mod_save_wave_mp_read_it_psi_(int * it,complex&lt;double&gt;*  psi_E1E2 );
          void  mod_mpi_cartesian_mp_mpi_cartesian_init_( );
          extern int mod_mpl_h_mp_iproc_ ;
   }
  
   int  main(){
       complex&lt;double&gt;  psi_local[512*24*512*24];
       int it ;
       mod_mpi_cartesian_mp_mpi_cartesian_init_();
       cout &lt;&lt; "proc  :" &lt;&lt; mod_mpl_h_mp_iproc_ &lt;&lt; "avant lecture\n";
       mod_save_wave_mp_read_it_psi_(&amp;it,psi_local);
       cout &lt;&lt; "psi ="&lt;&lt; psi_local[0] &lt;&lt; "poiur le proc "&lt;&lt;mod_mpl_h_mp_iproc_ &lt;&lt;"\n";
     }
  </code></pre>
  
  <p>and this is an exemple of a module : </p>
  
  <pre><code>MODULE mod_save_wave
  
  USE mod_constants
  USE mod_MPI_CARTESIAN
  
      USE mod_time_mesure,    ONLY : tempsEcoule
      USE mod_input_data, ONLY : Nt_laserPsansLaser
      USE mod_input_data, ONLY : n_phi, n_rho1_seg, n_rho2_seg
      USE mod_input_data, ONLY : Nt_periode, save_periodique
  
  
      !////////////////////////////////////////////////////////////////
      IMPLICIT NONE                           !
      REAL(kind=d_t)      :: prog_start_time, time_max_second !
      character(len=80)   :: IntermedWaveDir
      !================================================================
  
  
  CONTAINS
  
  SUBROUTINE begin_count_time()
      IMPLICIT NONE
  
      prog_start_time = tempsEcoule()                 !
  
  END SUBROUTINE begin_count_time
  
  
  SUBROUTINE READ_IT_PSI( it,  psi_E1E2 )
      IMPLICIT NONE
      !////////////////////////////////////////////////////////////////////////////////
      INTEGER                             :: it       !
      COMPLEX(kind=d_t), DIMENSION(n_phi,n_rho1_seg,n_phi,n_rho2_seg) :: psi_E1E2 !
      !================================================================================
  
      integer :: c
  
      do c = 0, c_max-1
          if( mod(iproc,c_max)==c ) then
  
              !////////////////////////////////////////////////////////////////////////////////
              OPEN( unit=11,file=concat(trim(IntermedWaveDir),concat(concat('BACK/wave_',str_iproc),'_2p2p2')),&amp;
                              status='old', form='unformatted', MODE='READ'       )
                  READ(11) it                             !
                  READ(11) psi_E1E2                           !
              CLOSE(11)                                   !
              print*,'iproc,readed it=',iproc, it
  
          endif
  
          CALL MPI_BARRIER(MPI_COMM_WORLD,infompi)                    !
          !================================================================================
      enddo
      !================================================================================
  
  END SUBROUTINE READ_IT_PSI
  
  
  SUBROUTINE WRITE_IT_PSI( it, psi_E1E2 )
      IMPLICIT NONE
      !////////////////////////////////////////////////////////////////////////////////
      INTEGER                             :: it       !
      COMPLEX(kind=d_t), DIMENSION(n_phi,n_rho1_seg,n_phi,n_rho2_seg) :: psi_E1E2 !
      !================================================================================
  
      integer :: c
  
      do c = 0, c_max-1
          if( mod(iproc,c_max)==c ) then
              !////////////////////////////////////////////////////////////////////////////////
              OPEN( unit=11,file=concat(trim(IntermedWaveDir),concat(concat('wave_',str_iproc),'_2p2p2')),&amp;
                                          form='unformatted') !
                  WRITE(11) it+1          !---- recommence a partir de la prochaine iterat!
                  write(11) psi_E1E2                          !
              CLOSE(11)                                   !
          endif
  
          CALL MPI_BARRIER(MPI_COMM_WORLD,infompi)                    !
          !================================================================================
      enddo
  
  END SUBROUTINE WRITE_IT_PSI
  
  
  END MODULE mod_save_wave
  </code></pre>