微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CMake 找不到 Fortran 的 MPI

如何解决CMake 找不到 Fortran 的 MPI

CMake 找不到 Fortran 的 MPI。

我使用的是带有 CMake 3.19.2 的 Arch Linux。 我安装了 openmpi (4.0.5-2) 包,并且如所述 here 我还安装了 gcc-fortran (10.2.0-4) 包以支持 fortran。

我的 CMake 脚本位于应找到 MPI 的行中:

find_package(MPI required)

它告诉我它找不到 Fortran 的 MPI:

-- Found MPI_C: /usr/lib/openmpi/libmpi.so (found version "3.1")                                        
-- Found MPI_CXX: /usr/lib/openmpi/libmpi_cxx.so (found version "3.1")                                  
-- Could NOT find MPI_Fortran (missing: MPI_Fortran_WORKS) 
CMake Error at /usr/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:218 (message):
  Could NOT find MPI (missing: MPI_Fortran_FOUND) (found version "3.1")
Call Stack (most recent call first):
  /usr/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:582 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-3.19/Modules/FindMPI.cmake:1721 (find_package_handle_standard_args)
  CMakeLists.txt:387 (find_package)

安装 openmpi 时,它告诉我应该启用 fortran 支持

(2/2) installing openmpi

Optional dependencies for openmpi
    gcc-fortran: fortran support [installed]

一个文件/usr/lib/openmpi/libmpi_mpifh.so。如果我错了,请纠正我,但我认为这应该是正确的库文件

预先感谢您的帮助!

编辑

我只是尝试构建一个最小的示例:

project(test)
cmake_minimum_required(VERSION 3.0)
enable_language(Fortran)           
find_package(MPI required)

通过它找到 MPI_Fortran

-- Found MPI_Fortran: /usr/lib/openmpi/libmpi_usempif08.so (found version "3.1")

CMakeLists.txt 是一个相当长的遗留文件...... 看来得自己找解决办法了。

解决方法

您需要在 COMPONENTS 命令中使用 find_package 关键字,例如

find_package(MPI REQUIRED COMPONENTS Fortran)

确保您在 CMakeLists.txt 中启用了 Fortran,方法是在项目命令中启用它,即

project(name LANGUAGES Fortran)

或致电

enable_language(Fortran)

find_package之前。

,

我解决了这个问题。正如答案的编辑中所说,这是遗留的 cmake,而不是我自己编写的。

我的 fortran 技能不是太高,所以我不知道为什么要使用它,但以下行确实破坏了库的查找过程:

set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -heap-arrays 0")

如果有人落入同一个陷阱,请尽量避免这种情况!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。