------------------ 于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%相关。您的帮助和时间将不胜感激。 谢谢。