MPI程序仅可在Visual Studio调试模式编译,终端提示找不到mpi.h如何解决
Windows终端下g++编译MPI程序找不到头文件解决方案
问题原因
Visual Studio中配置的MPI包含路径、库路径仅作用于VS项目内部,没有同步到系统全局环境变量,因此终端调用g++时无法定位到mpi.h头文件及对应的MPI依赖库。
解决方案
方案1:编译时手动指定MPI路径参数
首先确认你的MPI安装路径,Microsoft MPI默认安装路径如下:
- 头文件目录:
C:\Program Files (x86)\Microsoft SDKs\MPI\Include - 64位库目录:
C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x64 - 32位库目录:
C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x86
编译时给g++添加路径参数即可,64位程序编译示例命令:
g++ Project_1.cpp -o Project_1.exe -I "C:\Program Files (x86)\Microsoft SDKs\MPI\Include" -L "C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x64" -lmsmpi
参数说明:
-I后面接MPI头文件所在目录-L后面接MPI库文件所在目录-lmsmpi表示链接msmpi库
方案2:配置系统环境变量(一劳永逸)
将MPI相关路径添加到系统环境变量,之后编译无需再手动指定参数:
- 新建/编辑系统变量
INCLUDE,添加MPI头文件目录路径 - 新建/编辑系统变量
LIB,添加对应架构的MPI库目录路径 - 编辑系统变量
PATH,添加MPI可执行文件目录(默认C:\Program Files\Microsoft MPI\Bin)
配置完成后重启终端即可直接用g++ Project_1.cpp -o Project_1.exe -lmsmpi完成编译。
额外注意事项
- 注意g++编译架构和MPI库架构匹配,编译32位程序就用x86目录下的库,64位程序用x64目录下的库,否则会出现链接错误。
- 你当前的代码存在逻辑错误:
cout << MPI_Comm_rank << " " << MPI_Comm_size << endl;输出的是函数指针地址,应该修改为输出你之前定义的变量cout << rank << " " << size << endl;才能得到正确的进程编号和进程总数。
内容的提问来源于stack exchange,提问作者coder_man
相关产品推荐
相关产品推荐

