#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 может делать это на любом языке, который она поддерживает.