Скажем, у меня есть пакет, уже установленный на моей машине, и я хочу выяснить, нужно ли мне обновлять модули, включая файлы (.mod
), чтобы они были совместимы с остальной частью моей компиляции. Есть какой-либо способ сделать это?Можно ли определить, какой компилятор Fortran сгенерировал файл «.mod»?
ответ
Если модуль построен с использованием gfortran, то использование строк в файле mod (в Linux) предоставит имя компилятора и номер версии. Однако для Intel команда strings будет показывать только номер версии компилятора.
Спасибо за ваш ответ. Кажется, идея заключается в том, чтобы напечатать читаемые символы в файле, как отметил Марк в комментариях. Я проверил его с помощью gfortran-4.8.2, и он вернул модуль GFORTRAN версии 10, созданный из file.f90'. К чему относится 10? Как вы уже упоминали, для intel он вернул только число, которое предположительно является версией ... Я пытался найти более прочные способы, которые, по-видимому, недоступны. – Amir
@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
Метод' strings some_module.mod' не возвращает значимую строку для файлов мод, созданных gfortran 7.2.0 (в то время как для gfortran 4.8), насколько я пытался. Фактически, комментарии к выпуску для версии 4.9 в https://gcc.gnu.org/wiki/GFortran/News говорят: «Кроме того, файлы модулей теперь сжаты». Есть ли способ извлечь сообщение, например, версию модуля GFORTRAN '10', созданную из .. "из файлов мод, созданных последними версиями gfortran? – norio
У меня была подобная проблема в какой-то момент с библиотеками и файлами модулей, но нет источников. Поскольку проще получить правильный компилятор, чем получить исходный код для перекомпиляции в некоторых случаях или перекомпилировать только несколько вещей, как упоминалось в 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
.
- 1. Как определить, какой DataView сгенерировал событие?
- 2. Можно ли указать, какой хэш-алгоритм сгенерировал эти строки?
- 3. Можно ли определить, какой класс является функцией?
- 4. Как определить, какой из двух JComboBoxes сгенерировал событие itemchanged?
- 5. Какой компилятор, скомпилированный этот файл?
- 6. Может ли компилятор Fortran 95 скомпилировать код Fortran 77?
- 7. Как определить, существует ли файл с типичным расширением, используя Fortran
- 8. Как определить, какой компилятор C/C++ использовать?
- 9. Как узнать, какой компонент сгенерировал узел DOM?
- 10. Как установить компилятор Fortran (gcc42-fortran)
- 11. Определить компилятор в Matlab
- 12. Можете ли вы узнать, какой компилятор использовался для компиляции программы?
- 13. Определить, какой файл использует console.log?
- 14. Компилятор GNU Fortran для Visual Studio 2013
- 15. Есть ли бесплатный компилятор, который поддерживает Fortran Coarrays?
- 16. BizTalk сгенерировал неправильный файл 999?
- 17. Правильный компилятор Fortran для выполнения программы
- 18. Какой инструмент git сгенерировал это дерево?
- 19. Определить, какой файл JavaScript применял стиль?
- 20. Определить компилятор с #ifdef
- 21. При использовании «yield» почему компилятор сгенерировал тип IEnumerable и IEnumerator
- 22. Как определить, изменился ли какой-либо файл в каталоге
- 23. Исправить суффикс для исходного файла Fortran 2003 - компилятор Intel Fortran
- 24. Можно ли вводить компилятор директивы $ в службу?
- 25. Можно ли программно определить, какой объект передается методу в ruby?
- 26. Можно ли определить, какой процесс запускает мое приложение .Net?
- 27. Можно ли определить, какой разъем на коммутаторе подключен к компьютеру?
- 28. Можно ли определить, какой элемент фокусируется при изменении фокуса?
- 29. Старый форматированный компилятор FORTRAN (gfortran) Флаг?
- 30. Компилятор Intel Fortran «-параллельный» не работает
Конечно, нет стандартного способа Fortran, файлы '.mod' не упоминаются в стандарте (и многие другие, если на то пошло). В настоящее время форма и содержимое файлов .mod являются специфичными для реализации и почти не документированы. Я думаю, вы, вероятно, можете спрятаться в них с помощью редактора и, возможно, сможете узнать, чего хотите, и я думаю, ваш компилятор может иметь возможность вставлять информацию компилятора в файл '.mod'. Я думаю, вы можете повторно создать их несколько раз, пока вы это понимаете ... –
Спасибо за ваш ответ. Я столкнулся со многими ситуациями, что я почувствовал необходимость иметь эту информацию. Как вы упомянули, они, похоже, зависят от типа и версии компилятора. Конечно, в конечном итоге можно перекомпилировать все с помощью обычного компилятора, но иногда это может быть утомительным. – Amir