1

我正在使用 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:函数 MAIN__ hello_world.obj 中引用的未解析外部符号 MPI_INIT”

这是什么原因以及如何克服它?

4

1 回答 1

1

根本问题是库中的入口点是 MPI_Init,但因为 Fortran 不区分大小写,而且 Windows 上的 PGI Fortran 似乎将所有名称都大写,所以 MPI_INIT 与 MPI_Init 不匹配。(我假设您正在为 x64 构建并链接到 x64 库。)

我注意到 MS MPI 包含一个声明模块 MPI 的 MPI.f90 文件。但这也不涉及案件问题。

如果您使用的是 Intel(不是 PGI)Visual Fortran,您可以在 INCLUDE 之后添加以下行:

!DEC$ ATTRIBUTES DECORATE, ALIAS:"MPI_Init" :: MPI_INIT
!DEC$ ATTRIBUTES DECORATE, ALIAS:"MPI_Finalize" :: MPI_FINALIZE

看看这是否有效。PGI 可能有类似的东西。显然,您需要添加额外的指令来重命名您调用的其他 MPI 例程。

于 2017-11-06T00:10:44.480 回答