如何解决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 举报,一经查实,本站将立刻删除。