ubuntu - 无法(编译和)链接多个包含 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
解决方案
这些符号已从标准中删除,并且(意外地)默认从 Open MPI 4 中删除。您可以使用 重建 Open MPI --enable-mpi1compatibility
,等待 4.0.1 或现代化您的代码(例如MPI_Get_address()
)。从长远来看,后一种选择是最好的(并且可能是唯一的)。
推荐阅读
- javascript - 如何编写javascript函数来克隆表中的行?
- javascript - 如何根据Javascript中的多个数组属性取消组合对象数组
- android - Android Studio 中的错误未解析引用
- laravel - Laravel where 和 where 或者
- django - 如何在 django 中使用 opencv 将彩色图像转换为灰度图像
- neo4j - 为全文搜索运行 2 个密码查询在 neo4j 中返回错误
- arrays - 在“工作表 B”中创建新行时重复“工作表 A”
- java - 如何在 Intellij IDEA 中找到注解的处理器类?
- linux - 在 bash 脚本中切换到 root 用户
- three.js - 如何在特定关键帧处停止动画