首页 > 解决方案 > 无法(编译和)链接多个包含 openMPI 的 f90 程序

问题描述

我在编译几个包含 openmpi 的 .f90 程序时遇到问题。尝试使用 编译程序mpifort时,创建.o-files 似乎没有问题,但创建可执行文件失败。“警告”是对»mpi_address_«和的未定义引用»mpi_type_struct_«(仅这两个)。我使用的 makefile 如下所示:

all:$(EXE)

%.o:%.f90 input_parameters.h
    $(FC) $(DFLAGS) $(FCFLAGS) -c  $< $(MPILNFLAGS) -o $@

$(EXE):$(OBJ) 
    $(FC) $(DFLAGS) $(FCFLAGS) $(MPILNFLAGS) -o  $(EXE) $(OBJ)

MPICFLAGS = $(shell mpifort --showme:compile)
MPILNFLAGS = $(shell mpifort --showme:link)

有人知道该怎么做吗?

PS:例如mpifort一行看起来像这样:

mpifort -D_MPI_ -I/usr/local/include -pthread -O3 -w  -g -c  file_name.f90 -pthread -Wl,-rpath -Wl,/usr/local/lib -Wl,--enable-new-dtags -L/usr/local/lib -lmpi -o file_name.o

标签: ubuntugfortranopenmpi

解决方案


这些符号已从标准中删除,并且(意外地)默认从 Open MPI 4 中删除。您可以使用 重建 Open MPI --enable-mpi1compatibility,等待 4.0.1 或现代化您的代码(例如MPI_Get_address())。从长远来看,后一种选择是最好的(并且可能是唯一的)。


推荐阅读