Visual Studio无法找到MPI库

时间:2019-05-14 16:32:09

标签: visual-studio compiler-errors fortran mpi

------------------ 于5/20/2019更新 --------------- ---

根据Gilles Gouaillardet的建议,我使用/ NODEFAULTLIB选项编译了我的Fortran代码。现在,我得到的错误消息更少了:


错误1错误LNK2019:函数MAIN__Test.obj中引用的未解析的外部符号__intel_new_feature_proc_init

错误2错误LNK2019:函数MAIN__ Test.obj中引用的for_set_reentrancy尚未解析的外部符号

错误3错误LNK2019:函数MAIN__ Test.obj中引用的未解析外部符号for_write_seq_lis

错误4错误LNK2001:无法解析的外部符号mainCRTStartup LINK

错误5错误LNK2001:无法解析的外部符号_fltused msmpifmc.lib(mpifbind.obj)

错误6致命错误LNK1120:5个未解决的外部x64 \ Release \ Hello.exe


谢谢。

------------------ 于5/17/2019更新 --------------- ---

因此,这是对Gilles Gouaillardet的评论的回应。这只是对我原始问题的更新,而不是答案。

我的代码是:


  program mpisimple

  implicit none

  integer ierr

  include 'mpif.h'

  call mpi_init(ierr)

  !     print message to screen

  write(6,*) 'Hello World!'

  call mpi_finalize(ierr)

  end

回顾一下,我正在使用Visual Studio 2012,并且已经下载了Microsoft-MPI v.10.0。

以下目录已添加到Fortran选项卡的“其他包含目录”中:

C:\ Program Files(x86)\ Microsoft SDKs \ MPI \ Include \ x64

C:\ Program Files(x86)\ Microsoft SDKs \ MPI \ Include

以下目录已添加到“链接器”选项卡的“其他库目录”中:

C:\ Program Files(x86)\ Microsoft SDKs \ MPI \ Lib \ x64

这两个文件已作为附加依赖项添加: “ msmpifmc.lib”“ msmpi.lib” <-我也尝试了不使用引号的方法。

现在我遇到了不同的错误,这些错误与其他地方已经定义的事情有关:


错误1错误LNK2005:MSVCRT.lib(MSVCR110.dll)LIBCMT.lib(winapisupp.obj)中已定义__crtSetUnhandledExceptionFilter
错误2错误LNK2005:MSVCRT.lib(MSVCR110.dll)LIBCMT.lib(crtheap.obj)中已定义的_calloc_crt 错误3错误LNK2005:MSVCRT.lib(MSVCR110.dll)LIBCMT.lib(crt0dat.obj)中已定义的_amsg_exit 错误4错误LNK2005:_cexit已在MSVCRT.lib(MSVCR110.dll)LIBCMT.lib(crt0dat.obj)中定义 错误5错误LNK2005:_exit已在MSVCRT.lib(MSVCR110.dll)LIBCMT.lib(crt0dat.obj)中定义 错误6错误LNK2005:MSVCRT.lib(MSVCR110.dll)LIBCMT.lib(crt0dat.obj)中已定义的_initterm_e 错误7错误LNK2005:退出已在MSVCRT.lib(MSVCR110.dll)中定义LIBCMT.lib(crt0dat.obj) 错误8错误LNK2005:_lock已在MSVCRT.lib(MSVCR110.dll)LIBCMT.lib(mlock.obj)中定义
错误9错误LNK2005:_unlock已在MSVCRT.lib(MSVCR110.dll)LIBCMT.lib(mlock.obj)中定义
错误10错误LNK2005:_XcptFilter已在MSVCRT.lib(MSVCR110.dll)LIBCMT.lib(winxfltr.obj)中定义
错误11错误LNK2005:MSVCRT.lib(MSVCR110.dll)LIBCMT.lib(wsetloca.obj)中已定义的_configthreadlocale
错误12错误LNK2005:MSVCRT.lib(MSVCR110.dll)LIBCMT.lib(hooks.obj)中已经定义的“ void __cdecl终止(void)”(?terminate @@ YAXXZ)
错误13错误LNK2005:MSVCRT.lib(cinitexe.obj)LIBCMT.lib(crt0init.obj)中已定义的__xi_a
错误14错误LNK2005:MSVCRT.lib(cinitexe.obj)LIBCMT.lib(crt0init.obj)中已定义__xi_z
错误15错误LNK2005:MSVCRT.lib(cinitexe.obj)LIBCMT.lib(crt0init.obj)中已经定义的__xc_a
错误16错误LNK2005:MSVCRT.lib(cinitexe.obj)LIBCMT.lib(crt0init.obj)中已定义__xc_z
错误17错误LNK2005:MSVCRT.lib(MSVCR110.dll)LIBCMT.lib(errmode.obj)中已定义的__set_app_type 警告18警告LNK4098:defaultlib'MSVCRT'与使用其他库冲突;使用/ NODEFAULTLIB:库链接
警告19警告LNK4098:defaultlib'LIBCMT'与使用其他库冲突;使用/ NODEFAULTLIB:库链接
错误20致命错误LNK1169:找到一个或多个x64 \ Release \ Hello.exe多重定义的符号


谢谢大家的帮助!


------------------ 原始帖子 ------------------

我一直在尝试编译使用MPI的Fortran代码,但是我一直收到与MPI相关的“无法解析的外部符号”错误。如何正确链接MPI库?

我正在将Intel Compiler与Visual Studio一起使用,并且MPI由Microsoft MPI提供。错误消息如下


错误1错误LNK2019:函数MAIN__ ex5f.obj中引用了未解析的外部符号MPI_INIT 错误2错误LNK2019:函数MAIN__ ex5f.obj
中引用了未解析的外部符号MPI_COMM_RANK 错误3错误LNK2019:函数MAIN__ ex5f.obj
中引用了无法解析的外部符号MPI_COMM_SIZE 错误4错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_IJMATRIXCREATE 错误5错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_IJMATRIXSETOBJECTTYPE 错误6错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_IJMATRIXINITIALIZE 错误7错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_IJMATRIXSETVALUES 错误8错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_IJMATRIXASSEMBLE 错误9错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_IJMATRIXGETOBJECT 错误10错误LNK2019:在函数MAIN__ ex5f.obj
中引用了无法解析的外部符号HYPRE_IJVECTORCREATE 错误11错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_IJVECTORSETOBJECTTYPE 错误12错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_IJVECTORINITIALIZE 错误13错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_IJVECTORSETVALUES 错误14错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_IJVECTORASSEMBLE 错误15错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_IJVECTORGETOBJECT 错误16错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_BOOMERAMGCREATE 错误17错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_BOOMERAMGSETPRINTLEVEL 错误18错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析外部符号HYPRE_BOOMERAMGSETOLDDEFAULT 错误19错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_BOOMERAMGSETRELAXTYPE 错误20错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_BOOMERAMGSETRELAXORDER 错误21错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_BOOMERAMGSETNUMSWEEPS 错误22错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_BOOMERAMGSETMAXLEVELS 错误23错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_BOOMERAMGSETTOL 错误24错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_BOOMERAMGSETUP 错误25错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_BOOMERAMGSOLVE 错误26错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_BOOMERAMGGETNUMITERATIONS 错误27错误LNK2019:函数MAIN__ ex5f.obj
中引用的无法解析的外部符号HYPRE_BOOMERAMGGETFINALRELTVRES 错误28错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_BOOMERAMGDESTROY 错误29错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_IJMATRIXDESTROY 错误30错误LNK2019:函数MAIN__ ex5f.obj
中引用的未解析的外部符号HYPRE_IJVECTORDESTROY 错误31错误LNK2019:函数MAIN__ ex5f.obj
中引用了无法解析的外部符号MPI_FINALIZE 错误32错误LNK2001:无法解析的外部符号MPI_DUP_FN ex5f.obj
错误33错误LNK2001:无法解析的外部符号MPI_NULL_DELETE_FN ex5f.obj
错误34错误LNK2001:无法解析的外部符号MPI_NULL_COPY_FN ex5f.obj
错误35错误LNK2001:无法解析的外部符号MPI_COMM_DUP_FN ex5f.obj
错误36错误LNK2001:无法解析的外部符号MPI_COMM_NULL_DELETE_FN ex5f.obj
错误37错误LNK2001:无法解析的外部符号MPI_COMM_NULL_COPY_FN ex5f.obj
错误38错误LNK2001:无法解析的外部符号MPI_WIN_DUP_FN ex5f.obj
错误39错误LNK2001:无法解析的外部符号MPI_WIN_NULL_DELETE_FN ex5f.obj
错误40错误LNK2001:无法解析的外部符号MPI_WIN_NULL_COPY_FN ex5f.obj
错误41错误LNK2001:无法解析的外部符号MPI_TYPE_DUP_FN ex5f.obj
错误42错误LNK2001:无法解析的外部符号MPI_TYPE_NULL_DELETE_FN ex5f.obj
错误43错误LNK2001:无法解析的外部符号MPI_TYPE_NULL_COPY_FN ex5f.obj
错误44错误LNK2001:无法解析的外部符号MPI_CONVERSION_FN_NULL ex5f.obj
错误45致命错误LNK1120:44无法解析的外部x64 \ Release \ Test_MPI.exe


代码还使用在劳伦斯·利弗莫尔国家实验室(Lawrence Livermore National Laboratory)开发的Hypre库(因此,那些未解析的外部符号以“ HYPRE_”开头)。当我第一次遇到这个问题时,我发现它与文件名修改有关。但是,当问到Hypre库开发人员时,我收到的答复是:

“这些是MPI问题,与hypre中的名称修改没有任何关系(据我所知。)hypre库正在寻找C MPI例程,而您的主程序正在寻找Fortran MPI例程,但没有找到。我的猜测是您的链接行上可能没有MPI库。您可以尝试查看一些讨论如何在Visual Studio中使用MPI的论坛。”

我已经尝试了Visual Studio中“其他包含目录”和“其他库目录”的目录路径的几种组合,但这没有帮助。链接的路径为:

C:\ Program Files(x86)\ Microsoft SDKs \ MPI \ Include

C:\ Program Files(x86)\ Microsoft SDKs \ MPI \ Include \ x64

C:\ Program Files(x86)\ Microsoft SDKs \ MPI \ Lib \

C:\ Program Files(x86)\ Microsoft SDKs \ MPI \ Lib \ x64

我应该注意,我一直尝试编译的代码实际上是Hypre库发行版中包含的示例文件,因此,我怀疑问题是否出自任何编码错误。不过,以防万一。代码以

开头

程序ex5f

无隐含

包括“ mpif.h”

我想要做的就是编译代码。我发现过往讨论类似问题的帖子,但是它们与我遇到的问题并非100%相关。您的帮助和时间将不胜感激。 谢谢。

0 个答案:

没有答案