내 C++ 프로젝트에있는 fortran90 프로그램이 포함되어 있습니다.C++ 코드로 모듈에 포함 된 Fortran90 함수를 호출하는 방법은 무엇입니까?
첫 번째 stept 나는 그들의 name_() 함수를 호출하려고 및 nm "사용하여 obj 파일의 기호를 dispalying하여"mp_mpi_cartesian_init_ "정의되지 않은 참조 오류가 발생합니다 module_function_ 않도록 자신의 모듈은 내가 모듈 이름을 추가하고 내가 같은 동일한 문제가 있지만, 포트란 (OBJ) 사이를 받기 : 여기
는 C++ 코드 "Constants.f90 :(텍스트 + 0x36) __powi4i4에 정의되지 않은 참조."이는 모듈의 exemple이다
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')),&
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')),&
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
아마도 일부 Fortran 라이브러리와 링크해야합니다. –
실제로 Fortran 프로그램의 make 파일을 사용하여 모든 obj를 정적 라이브러리에 넣어서 C++ 프로그램을 컴파일하고 파일을 만들 때 extern lib가 없습니다 – user2196748