无法使用 MSMPI 和 GCC 编译程序

Posted

技术标签:

【中文标题】无法使用 MSMPI 和 GCC 编译程序【英文标题】:Cannot compile program with MSMPI and GCC 【发布时间】:2020-09-24 19:55:42 【问题描述】:

我正在尝试用 gcc 在 C 中编译一个 MSMPI 程序。

这是我在代码中包含的内容:

#define MSMPI_NO_SAL

#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

我正在使用 Vscode 完成以下任务:


  "version": "2.0.0",
  "tasks": [
    "type": "shell",
    "label": "C/C++: gcc.exe build active file",
    "command": "C:\\MinGW\\bin\\gcc.exe",
    "args": ["-g", "$file","-I","C:\\Program Files (x86)\\Microsoft SDKs\\MPI\\Lib\\x64","-I","C:\\Program Files (x86)\\Microsoft SDKs\\MPI\\Include",  "-o", "$fileDirname\\$fileBasenameNoExtension.exe"],
    "options": 
      "cwd": "$workspaceFolder"
    ,
    "problemMatcher": ["$gcc"],
    "group": 
      "kind": "build",
      "isDefault": true
    
  ]

但是,在尝试编译时,我的代码出现以下错误:

In file included from d:\Documents\1.Ecole\University\Undergrad\Fall 2020\COMP 428\ass1\pi_est_parallel.c:5:
C:\Program Files (x86)\Microsoft SDKs\MPI\Include/mpi.h:4617:5: error: unknown type name '_Out_writes_'; did you mean '_mpi_writes_'?
 4617 |     _Out_writes_(maxprocs) int array_of_errcodes[]
      |     ^~~~~~~~~~~~
      |     _mpi_writes_
C:\Program Files (x86)\Microsoft SDKs\MPI\Include/mpi.h:4629:5: error: unknown type name '_Out_writes_'; did you mean '_mpi_writes_'?
 4629 |     _Out_writes_(maxprocs) int array_of_errcodes[]
      |     ^~~~~~~~~~~~
      |     _mpi_writes_
The terminal process "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -Command C:\MinGW\bin\gcc.exe -g 'd:\Documents\1.Ecole\University\Undergrad\Fall 2020\COMP 428\ass1\pi_est_parallel.c' -I 'C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x64' -I 'C:\Program Files (x86)\Microsoft SDKs\MPI\Include' -o 'd:\Documents\1.Ecole\University\Undergrad\Fall 2020\COMP 428\ass1\pi_est_parallel.exe'" terminated with exit code: 1.
Terminal will be reused by tasks, press any key to close it.

我是不是在编译时忘记包含一些东西?

【问题讨论】:

【参考方案1】:

这是 Microsoft mpi.h 头文件中的一个已知问题:

Build errors with MSMPI_NO_SAL

该问题引用了 simple patch adding _Out_writes_ 来解决此问题。您可以通过添加在自己的代码中反映这一点

#define _Out_writes_(x)

如果您无法升级到最新版本,请在添加 mpi.h 之前。

【讨论】:

我补充说解决了,因为它确实解决了眼前的问题。但是,现在我得到了undefined reference to MPI_Comm_size@8`。任何 MPI 函数也是如此

以上是关于无法使用 MSMPI 和 GCC 编译程序的主要内容,如果未能解决你的问题,请参考以下文章

使用 MPI 并在 Linux 中使用 OpenMPI 的代码不能在使用 MSMPI 的 Windows 中编译

CMD中无法使用GCC编译C程序

如何防止本地 msmpi 安装加载系统范围的 msmpi.dll

程序无法使用 GCC 运行,但可以使用 clang

无法在 GCC 8.3.1 中使用 TSDuck 进行编译

无法在 gcc (OS X) 上使用 curses 编译)