Неразрешенный внешний символ MPI_INIT при компиляции MPI с PGI Visual Fortran
Я использую Visual Fortran и пытаюсь реализовать очень простой код с использованием MPI.
program hello_world
include 'C:\Program Files (x86)\Microsoft SDKs\MPI\Include\mpif.h'
integer ierr
call MPI_INIT ( ierr )
write(*,*) 'Hello world'
call MPI_FINALIZE ( ierr )
pause
end program hello_world
После того, как я определил библиотеку и сделал много шагов, которые я нашел во многих блогах, у меня появляется эта ошибка:
"Ошибка 1, ошибка LNK2019: неразрешенный внешний символ MPI_INIT, на который ссылается функция MAIN__ hello_world.obj"
В чем причина этого и как с этим справиться?
1 ответ
Основная проблема заключается в том, что точкой входа в библиотеку является MPI_Init, но поскольку Fortran не чувствителен к регистру, и может показаться, что PGI Fortran в Windows превосходит все имена, MPI_INIT не соответствует MPI_Init. (Я предполагаю, что вы создаете для x64 и ссылки на библиотеки x64.)
Я отмечаю, что MS MPI включает файл MPI.f90, который объявляет модуль MPI. Но это также не касается вопроса дела.
Если вы используете Intel (не PGI) Visual Fortran, вы можете добавить следующие строки после INCLUDE:
!DEC$ ATTRIBUTES DECORATE, ALIAS:"MPI_Init" :: MPI_INIT
!DEC$ ATTRIBUTES DECORATE, ALIAS:"MPI_Finalize" :: MPI_FINALIZE
и посмотрим, работает ли это. ЗГУ может иметь что-то похожее. Очевидно, вам нужно будет добавить дополнительные директивы для переименования других вызываемых вами подпрограмм MPI.