Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Fortran > MinGW gfortran на windows XP |
Автор: OK54 24.10.2014, 18:52 |
Добрый день! Работаю с gfortran (MinGW x32) под Windows 7, скаченный на mingw.org. Компилирую dll фортран программы. Столкнулся с проблемой что под windows xp работает неправильно. Т.е. фортран программа представляет собой сложную математическую модель, на разных win 7 выдает нормальные одинаковые результаты, на различных windows xp выдает одинаковые ненормальные результаты, а именно значение одной из переменных отличается в 3 раза. До этого другую модель компилировал, так не было такой проблемы... Дело в том что у нас на работе лицензия на XP. Может надо какие-нибудь настройки сделать или адекватные дистрибутивы под XP посоветуете? или может какие-то используемые операторы в фортран программе несовместимы с XP. Или XP можно как-то аккуратно проапгрейдить, так чтобы заработало??? |
Автор: tzirechnoy 24.10.2014, 19:27 |
Я посоветую отладить программу. Внезапно. |
Автор: Фантом 24.10.2014, 21:23 |
Чудес не бывает. Подобные штуки обычно означают, что в программе есть некорректная работа с памятью (для области применения Фортрана это почти всегда обращение к несуществующему элементу массива), которая приводит к "несанкционированной" перезаписи каких-то данных этой же программы. Соответственно, попробуйте собрать ее с ключом компилятора -fcheck=all и посмотреть, что получится. Именно. |
Автор: OK54 24.10.2014, 21:25 |
этих программ не одна, и фиг знает как этот быдло код работает. это вариант, но запарюсь. Еще идеи? Есть сообщения типа warning, я их отключил, т.к. не понял. Может в них дело? Правда с предыдущей программой несмотря на это все ок было. Добавлено через 2 минуты и 13 секунд Ооо...Фантом, спасибо! Странно, только русский сериал про чернобыль смотрел, серия про Фантомов ![]() |
Автор: tzirechnoy 24.10.2014, 22:48 | ||
Выкинуть этот ###код. Я, кстати, серьёзен. Тебе реально повезло, что тебе на относительно раннем этапе работы с программой попалась система, которая наглядно показывает уровень человека, который её писал. Соответственно, сейчас ты можэшь решыть -- выкинуть это барахло или отладить. Замечу, что работать с этим в таком виде в win8, где оно "вроде работает" -- я бы тожэ не стал. Рискованное развлечение. |
Автор: OK54 25.10.2014, 10:37 |
да, там не сложно запутаться в операторах goto и куче громадных глобальных массивов. Видимо код создавали по блок схеме алгоритма, отсюда и goto. Переписывать некогда кучу программ. С опцией -fcheck=all перестало работать, вернее там программа прекратила работу из-за выхода переменной за некоторые границы. |
Автор: tzirechnoy 25.10.2014, 11:26 | ||
Значит, выкинуть его программу и оставить только то, в чём он силён -- его уравнения, и, возможно, разностные схемы. Разностная схема -- она только в первый раз страшная, к десятому их можно писать за полчаса и не приходя в сознание. |
Автор: Фантом 25.10.2014, 14:03 | ||||||
Поскольку часть сборок при этом работает правильно, это означает, что сам по себе выход проблемой не является, если только на месте "лишнего" элемента не размещается какая-то другая переменная. Поэтому отладка достаточно проста: найдите определение этого массива и увеличьте его размеры так, чтобы вылезания за границу не происходило. Добавлено через 1 минуту и 33 секунды
![]() |
Автор: OK54 25.10.2014, 14:40 |
> Ну да, индекс массива вылезает за границу, как и предполагалось. Вы, кстати, должны были получить сообщение, какой именно, в каком массиве и в каком месте программы. Не массив, а просто значение переменной по логике программы. Думаете дело в обращении к несуществующему элементу массива? Я сейчас сымитировал такую ситуацию, программа действительно ничего и не сообщает об ошибке при выключенных предупреждениях. При включенных предупреждениях кроме моей строчки нигде не сообщает о выходе за границы, если только это индекс где-то не динамически отсчитывается. Вот все типы предупреждений в проге: 1. Warning: Label 61 at (1) defined but not used 2. Warning: Unused variable 'jcn' declared at (1) 3. Ini26.for:90:0: warning: 'j100' may be used uninitialized in this function [-Wmaybe-uninitialized] 4. Warning: Possible change of value in conversion from REAL(8) to REAL(4) at (1) 5. Warning: Deleted feature: ASSIGN statement at (1) 6. Warning: Deleted feature: Assigned GOTO statement at (1) 7. Warning: Deleted feature: PAUSE statement at (1) 8. Warning: Nonconforming tab character in column 1 of line 2 |
Автор: Фантом 25.10.2014, 14:52 |
Не может быть. Это предупреждения компилятора, а нам нужна ошибка времени выполнения. Индекс, естественно, вычисляется динамически, иначе эту ошибку давно бы поймали. |