Загадочная природа модулей Fortran 90


Модули Фортрана 90-это недолговечные существа. Некоторое время я с некоторым успехом использовал модуль (singular) (компиляция с использованием Intel Visual Fortran и Visual Studio 2010). Затем я написал другой модуль и попытался использовать его в другой функции, прежде чем получить эту ошибку:

 error #7002: Error in opening the compiled module file.  Check INCLUDE paths.

Поэтому я удалил оскорбляющий модуль. Но теперь я получаю ту же ошибку после того, как при попытке получить доступ к моему оригинальному модулю!

Как мне найти этих таинственных существ? Почему работает один модуль но не два же? Я предполагаю, что мне нужно удалить и перекомпилировать их, или сказать компилятору, чтобы он включил их каким-то образом. Я знаю расположение файлов исходного кода, но не , где они компилируются в .
1 8

1 ответ:

Для этого конкретного процессора (многие другие процессоры Fortran имеют аналогичные характеристики, но детали отличаются):

  • Если модуль успешно скомпилирован, компилятор генерирует a .файл mod (и, возможно, an .obj file), который содержит информацию о сущностях, предоставляемых модулем. Именно на этот файл mod ссылается сообщение об ошибке, которое вы цитируете. Компилятор требует этот файл mod, когда он встречает инструкцию USE для модуля при компиляции других источник. (Obj-файл используется на этапе компоновки.)

  • Следовательно, прежде чем модуль будет использован, компилятор должен в какой-то момент скомпилировать исходный код модуля. Это означает, что исходный код модуля (MODULE...END MODULE) должен был появиться ранее в исходном файле до инструкции USE или должен был находиться в отдельном файле, который был скомпилирован до исходного файла с инструкцией USE.

  • При компиляции с использованием проекта Intel Fortran внутри Visual Studio, среда сборки автоматически попытается организовать соответствующий порядок компиляции для исходных файлов в проекте. При компиляции с помощью команды ifort из командной строки программист отвечает за управление порядком компиляции.

  • Каталог, в который поступают сгенерированные файлы mod, определяется первым параметром командной строки / module, заданным компилятору. В Visual Studio этот параметр задается с помощью команды Fortran > выходные файлы > Свойство пути модуля. По умолчанию для проекта Fortran в Visual Studio это свойство задано как имя текущей конфигурации, поэтому файлы mod отображаются в дочернем каталоге проекта, называемом Debug или Release. При отсутствии опции командной строки /module файлы mod отображаются в текущем каталоге.

  • Каталоги, указанные параметром командной строки /module (или эквивалентным свойством Visual Studio), также используются при поиске файлов mod. Кроме того, поиск выполняется в каталогах, указанных параметром командной строки /I (в Visual Studio Fortran > общие > дополнительные каталоги включения).

Из вашего вопроса не ясно, как вы распределили модули между исходными файлами, есть ли у вас один проект Visual Studio или несколько проектов и т. д. Если вы имеете дело только с одним проектом, то, как правило, все, что требуется, это добавить все файлы Fortran в исходные файлы для проекта, и настройки по умолчанию должны "работать". Ошибки в поиске файлов mod могут быть вызваны тем, что:

  • Связанный с модулем источник отсутствует в одном из исходных файлов проекта;

  • Компиляция исходного кода для модуля не удалась по какой-то другой причине (есть ли другие ошибки, перечисленные ранее в последовательности сборки?)

  • Модуль определяется после его использования в конкретном исходном файле;

  • Существуют циклические зависимости между модулями (модуль а использует модуль B, который использует A или аналогичный-это не допускается правилами языка);

  • Некоторые исходные конструкции, которые путают автоматическое определение порядка сборки (более старые версии системы сборки были перепутаны формой оператора use F2003 с двойным двоеточием, плюс можно запутать операторы USE так, что система сборки не сможет их идентифицировать), но эти аспекты довольно неясны.

С несколькими проектами Fortran в Visual Studio может потребоваться изменить каталоги поиска модулей для зависимых проектов, чтобы они могли найти файлы mod, скомпилированные предыдущими проектами в дереве зависимостей проекта. Более поздние версии Intel Fortran обрабатывают этот аспект также автоматически, если параметры межпроектных зависимостей в Visual Studio верны.