我在编译几个包含openmpi的.f90程序时遇到问题。当尝试使用 mpifort
编译程序时,创建 .o
文件似乎没有问题,但创建可执行文件会失败。"警告"是对»mpi_address_«
和»mpi_type_struct_«
(仅这两个)的未定义引用。我使用的生成文件如下所示:
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
默认情况下,
这些符号已从标准中删除,并且(意外地)从 Open MPI 4 中删除。您可以使用 --enable-mpi1compatibility
重建 Open MPI,等待 4.0.1 或使您的代码现代化(例如 MPI_Get_address()
)。从长远来看,后一种选择是最好的(也可能是唯一的选择)。