CMake не находит MPI при использовании устаревшей версии компилятора fortran

#cmake #fortran #mpi #archlinux #openmpi

#cmake #fortran #mpi #archlinux #openmpi

Вопрос:

Вчера я задал довольно похожий вопрос. Но этот немного отличается.

Я нахожусь в Arch Linux с установленным gcc 10. Мне нужно использовать gcc с версией <9 (коллега даже использует gcc4) для компиляции базы кода Fortran.

Итак, я установил пакет gcc7-fortran, потому что этот коллега сказал мне, что он когда-то работал с этим компилятором. CMake выясняет, что он должен использовать mpif90 для компиляции всего проекта, который вызывает не gfortran-7, а gfortran версии 10.

Я еще не мог понять, как сказать mpif90 использовать другой компилятор в качестве gfortran. Итак, я сделал небольшой взлом: я переместил /usr/bin/gfortran в /usr/bin/gfortran-10 и сделал программную ссылку из /usr/bin/gfortran-7 в /usr/bin/gfortran . Теперь mpif90 использует gfortran с версией 7. Отлично.

Теперь возникает ошибка. CMake может найти MPI, если я использую gfortran-10 в качестве компилятора, но не может найти MPI, если я использую gfortran-7.

 -- 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)
  CMAKE/modules/FindMPI.cmake:1721 (find_package_handle_standard_args)                          
  CMakeLists.txt:388 (find_package)                                                             

 

У кого-нибудь когда-либо была подобная проблема?

Заранее спасибо!

Редактировать

при использовании gfortran-10 cmake сообщает о поиске MPI с этим сообщением

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

Комментарии:

1. Вы уверены, что ваша библиотека MPI совместима как с gcc-7, так и с gcc-10? Возможно, вам понадобятся отдельные библиотеки, скомпилированные соответствующим образом. Вот почему такие вещи, как modules.sourceforge.net существуют

2. Нет, я не уверен. И, похоже, это не так. Однако я понятия не имею, как установить более старую версию openmpi, кроме как загрузить / собрать ее вручную. Так что, возможно, я мог бы попробовать это. (Теперь это похоже на вопрос новичка)

3. Предполагая cmake попытки use mpi или use mpi_f08 , тест будет использовать mod файлы Fortran … которые не совместимы между разными gfortran версиями. Похоже, ваш хак не может сработать, и вам сначала нужно перестроить MPI с помощью компилятора Fortran, который вы будете использовать.

4. Хорошо, спасибо за разъяснение. Я родом из мира C , и там (на моем уровне знаний) все должно быть обратно совместимо. Поэтому я предположил, что коллекция компиляторов gcc может делать это на любом языке, который она поддерживает.