编译OpenFOAM与MPICH-3.3.2遇mpi.h缺失错误,求额外配置
mpi.h的问题 你已经走对了设置WM_MPLIB=SYSTEMMPI的第一步,但OpenFOAM的编译系统还没正确定位到MPICH的头文件和库目录——这就是为什么系统默认路径的OpenMPI能正常编译,而自定义安装的MPICH不行。下面是具体的修复步骤:
1. 确认MPICH的安装环境
先搞清楚你的MPICH安装路径,打开终端输入:
which mpicc
输出会是类似/usr/local/mpich/bin/mpicc的路径,这个路径的上级目录就是MPICH的安装根目录(比如/usr/local/mpich)。
再用命令查看MPICH的编译参数,验证头文件和库的位置:
mpicc -show
你会看到包含-I/path/to/mpich/include和-L/path/to/mpich/lib的输出,这两个路径就是关键。
2. 配置MPICH的环境变量
把MPICH的路径加到环境变量里,编辑~/.bashrc(或者OpenFOAM的etc/bashrc),添加以下内容(替换成你的MPICH实际路径):
# MPICH环境配置 export MPICH_DIR=/usr/local/mpich export PATH=$MPICH_DIR/bin:$PATH export LD_LIBRARY_PATH=$MPICH_DIR/lib:$LD_LIBRARY_PATH export MPI_INCLUDE=$MPICH_DIR/include export MPI_LIB=$MPICH_DIR/lib
保存后执行source ~/.bashrc加载新的环境变量。
3. 调整OpenFOAM的SYSTEMMPI配置
OpenFOAM的编译系统需要明确知道SYSTEMMPI对应的路径,找到OpenFOAM安装目录下的etc/config.sh/mpi文件(比如/home/pranto/OpenFOAM-dev/etc/config.sh/mpi),找到SYSTEMMPI对应的配置块,修改成:
SYSTEMMPI) MPI_INCLUDE_DIR=${MPI_INCLUDE:-$MPICH_DIR/include} MPI_LIB_DIR=${MPI_LIB:-$MPICH_DIR/lib} MPI_ARCH_FLAGS="-I$MPI_INCLUDE_DIR" MPI_LINK_FLAGS="-L$MPI_LIB_DIR -lmpi -lmpicxx" MPI_COMPILER=mpicc MPI_COMPILER_CXX=mpicxx ;;
这样OpenFOAM编译时就会主动去MPICH的目录找头文件和库了。
4. 清理编译缓存后重新编译
先把之前编译的残留文件清掉:
wcleanAll
然后重新加载OpenFOAM的环境并编译:
source /home/pranto/OpenFOAM-dev/etc/bashrc ./Allwmake
额外验证步骤
如果还是有问题,先手动验证MPICH的环境是否正常:写一个简单的MPI测试程序test.c:
#include <mpi.h> #include <stdio.h> int main(int argc, char** argv) { MPI_Init(&argc, &argv); int rank; MPI_Comm_rank(MPI_COMM_WORLD, &rank); printf("Hello from rank %d\n", rank); MPI_Finalize(); return 0; }
用MPICH的编译器编译运行:
mpicc -o test test.c mpiexec -n 2 ./test
如果能正常输出两个Hello信息,说明MPICH的环境没问题,那再检查OpenFOAM的配置是否修改正确。
内容的提问来源于stack exchange,提问作者Pranto




