2016-06-07 2 views
6

Скажем, у меня есть пакет, уже установленный на моей машине, и я хочу выяснить, нужно ли мне обновлять модули, включая файлы (.mod), чтобы они были совместимы с остальной частью моей компиляции. Есть какой-либо способ сделать это?Можно ли определить, какой компилятор Fortran сгенерировал файл «.mod»?

+3

Конечно, нет стандартного способа Fortran, файлы '.mod' не упоминаются в стандарте (и многие другие, если на то пошло). В настоящее время форма и содержимое файлов .mod являются специфичными для реализации и почти не документированы. Я думаю, вы, вероятно, можете спрятаться в них с помощью редактора и, возможно, сможете узнать, чего хотите, и я думаю, ваш компилятор может иметь возможность вставлять информацию компилятора в файл '.mod'. Я думаю, вы можете повторно создать их несколько раз, пока вы это понимаете ... –

+0

Спасибо за ваш ответ. Я столкнулся со многими ситуациями, что я почувствовал необходимость иметь эту информацию. Как вы упомянули, они, похоже, зависят от типа и версии компилятора. Конечно, в конечном итоге можно перекомпилировать все с помощью обычного компилятора, но иногда это может быть утомительным. – Amir

ответ

7

Если модуль построен с использованием gfortran, то использование строк в файле mod (в Linux) предоставит имя компилятора и номер версии. Однако для Intel команда strings будет показывать только номер версии компилятора.

+0

Спасибо за ваш ответ. Кажется, идея заключается в том, чтобы напечатать читаемые символы в файле, как отметил Марк в комментариях. Я проверил его с помощью gfortran-4.8.2, и он вернул модуль GFORTRAN версии 10, созданный из file.f90'. К чему относится 10? Как вы уже упоминали, для intel он вернул только число, которое предположительно является версией ... Я пытался найти более прочные способы, которые, по-видимому, недоступны. – Amir

+1

@Amir Номер версии модуля не очень ясен. Для gfortran-4.6.3 это 6, а для gfortran-4.8.2 - 10. На веб-сайте gfortran по адресу [https://gcc.gnu.org/wiki/GFortran/News](https://gcc. gnu.org/wiki/GFortran/News), он гласит: «Файлы модулей: версия файлов модулей (.mod) была увеличена. Модули Fortran, скомпилированные более ранними версиями GCC, должны быть перекомпилированы, когда они USEd файлы, скомпилированные с GCC 4.8, потому что GCC 4.8 не может читать .mod-файл более ранних версий GCC; попытка сделать это дает сообщение об ошибке. ' – BChow

+0

Метод' strings some_module.mod' не возвращает значимую строку для файлов мод, созданных gfortran 7.2.0 (в то время как для gfortran 4.8), насколько я пытался. Фактически, комментарии к выпуску для версии 4.9 в https://gcc.gnu.org/wiki/GFortran/News говорят: «Кроме того, файлы модулей теперь сжаты». Есть ли способ извлечь сообщение, например, версию модуля GFORTRAN '10', созданную из .. "из файлов мод, созданных последними версиями gfortran? – norio

3

У меня была подобная проблема в какой-то момент с библиотеками и файлами модулей, но нет источников. Поскольку проще получить правильный компилятор, чем получить исходный код для перекомпиляции в некоторых случаях или перекомпилировать только несколько вещей, как упоминалось в OP, я счел полезным получить версию gfortran-модуля где-нибудь на SO. К сожалению, информация найти нелегко, поэтому есть необходимость в обратном проектировании, и кто-то может редактировать и добавлять больше.

Я сделал немного поискового запроса, и вот отправная точка: Для gfortran версия модуля появилась на «gfortran 4.4» в соответствии с this page. Важно сказать, что номер версии предназначен для модуля не для компилятора. Я думаю, это изменяется, когда формат файла модуля изменяется для учета некоторых новых функций.

Объединив информацию от this page, this pages и this one, я придумал этот список переписки.

GCC version module file version 
----------------------------------- 
up to 4.3.2 unversioned 
4.4   0 
4.5.1   4 
4.6.3   6 
4.7.0pre  8 
4.7.1   9 
4.8.[1-3]  10 
4.9.2   12 
5.1.0   14 

Начиная с версии 4.8 на, то gfortran команда включает в себя небольшое сообщение в примечаниях к выпуску при изменении версии модуля. Сообщение выглядит как

файлов модуля: версии файлов модуля (.mod) был увеличен

, как это может быть считан из this link. Они не дают номер версии, и кажется, что, когда говорят, что они увеличиваются, он увеличивается на 2.

Смежные вопросы