我试图在windows上编译带有openmpi的prime.c。我尝试了32位和64位版本的OpenMPI_v1.6.2。我得到了这些输出。
微软(注册商标)C/C++-擎天柱编译器版本17.00.61030 für x86版权(C)微软公司。这是我的工作。mpi_prime.c微软(注册商标)增量链接版本11.00.61030.0版权(C)微软公司。版权所有。/LIBPATH:C:\Entwicklung\OpenMPI_v1.6.2-x64/lib libmpi_cxx.lib libmpi.lib libopen-pal.lib libopen-rte.lib先进32. x86 shlwapi.lib mpicxx mpi_prime.c微软(R) C/C++-Optimierungs编译器版本17.00.61030 für x86版权(C) Microsoft Corporation。这是我的工作。mpi_prime.c微软(注册商标)增量链接版本11.00.61030.0版权(C)微软公司。版权所有。/LIBPATH:C:\Entwicklung\OpenMPI_v1.6.2-x64/lib libmpi_cxx.lib libmpi.lib libopen-pal.lib libopen-rte.lib 32. auf shlwapi.lib mpi_prime.obj mpi_prime.obj : error LNK2019: Verweis auf nicht aufgel stes外部符号"_MPI_Comm_rank“中的"_main”。mpi_prime.obj : error LNK2019: stes在功能"_main“中外化符号"_MPI_Comm_size”。mpi_prime.obj : error LNK2019: stes在功能"_main“中外化符号"_MPI_Finalize”。mpi_prime.obj : error LNK2019: stes在功能"_main“中外化符号"_MPI_Init”。mpi_prime.obj : error LNK2019: stes在功能"_main“中外化符号"_MPI_Reduce”。mpi_prime.obj : error LNK2019: stes在功能"_main“中外化符号"_MPI_Wtime”。mpi_prime.obj : error LNK2019: Verweis stes在功能"_main“中外化符号"_ompi_mpi_comm_world”。mpi_prime.obj : error LNK2019: Verweis stes在功能"_main“中外化符号"_ompi_mpi_op_max”。mpi_prime.obj : error LNK2019: Verweis stes在功能"_main“中外化符号"_ompi_mpi_op_sum”。mpi_prime.obj : error LNK2019: stes在功能"_main“中外化符号"_ompi_mpi_int”。mpi_prime.exe :致命错误LNK1120: 10 nicht aufgel LNK1120 e Microsoft (注册商标)C/C++-Optimierungs编译器版本17.00.61030 für x86版权(C)微软公司。这是我的工作。mpi_prime.c微软(注册商标)增量链接版本11.00.61030.0版权(C)微软公司。版权所有。libopen-pal.lib libopen-rte.lib 32. auf Ws2_32.lib shlwapi.lib mpi_prime.obj mpi_prime.obj : error LNK2019: Verweis auf nicht aufgel stes外部符号"_ompi_mpi_comm_world“中的"_main”。mpi_prime.obj : error LNK2019: Verweis stes在功能"_main“中外化符号"_ompi_mpi_op_max”。mpi_prime.obj : error LNK2019: Verweis stes在功能"_main“中外化符号"_ompi_mpi_op_sum”。mpi_prime.obj : error LNK2019: stes在功能"_main“中外化符号"_ompi_mpi_int”。mpi_prime.exe :致命错误LNK1120: 4 nicht aufgel体外
编辑: Verweis auf nicht aufgel stes外部符号意味着“未解决的对外部符号的引用”
因此,我想这与使用错误的.dll与32位对64位的库问题有关,因为32位版本似乎产生的冲突较少。
我的计划是:
发布于 2014-01-17 00:23:52
Windows二进制Open发行版附带了构建为DLL集的库。提供的.lib文件只是这些DLL的导入库。当从DLL调用函数时,它们的原型必须携带__declspec(dllimport)扩展存储类属性,以便编译器生成稍微不同的代码来调用这些函数或访问导出的变量。此外,带有dllimport存储类属性的函数的名称以_imp_作为前缀。如果没有dllimport,例如对于MPI_Init,编译器会生成对_MPI_Init符号的引用,而库实际上会导出_imp_MPI_Init,从而导致一个未解决的符号错误。
由于Open既可以作为一组静态库编译,也可以作为一组DLL编译,因此它使用一种简单的预处理器机制来使用一组头文件(例如mpi.h)来处理这两种情况。如果定义了预处理符号OMPI_IMPORTS,则所有MPI函数原型都会得到dllimport处理,否则就不会得到它。来自ORTE和OPAL框架的函数原型也是如此,相应的预处理符号是ORTE_IMPORTS和OPAL_IMPORTS。
要让代码与二进制Open发行版一起编译,您应该将OMPI_IMPORTS添加到预处理器定义列表中,这些定义可以在项目的设置中找到: Configuration -> C/C++ ->预处理器->预处理器定义。
https://stackoverflow.com/questions/21145806
复制相似问题