LINUX.ORG.RU

Замена ifort на gfortran

 


0

1

Debian x86_64.
gfortran --version
GNU Fortran (Debian 4.7.2-5) 4.7.2

Есть исходники с расширением *.f, созданные не позднее 1977 года.
Эти исходники представляют собой примеры программ для расчетов и есть большая вероятность, что всё в них правильно, и они должны работать. В директории с исходниками лежит скрипт, содержащий следующее:

#! /bin/sh
F90="ifort"
FFLAGS="-r8 -O2 -extend-source 80 -warn general -c"
$F90 $FFLAGS *.f
ar -r test.a *.o
rm -f *.o
Я же располагаю только gfortran.

Краткие выдержки из ifort man:

-r8    Makes default real and complex variables  8  bytes  long.  REAL declarations are treated as DOUBLE PRECISION (REAL(KIND=8)) and COMPLEX  declarations  are  treated  as  DOUBLE  COMPLEX  (COMPLEX(KIND=8)). This option is the same as specifying -real_size 64 or -autodouble.

-O2  or  -O This option is the default for optimizations.  However,  if  -g is specified, the default is -O0.

-warn general (просто включаем предупреждения)

Правильно ли я понимаю, что -r8 будет соответствовать -freal-4-real-8 для gfortran? -O2 и -warn general я могу, видимо, опустить.

На данный момент при попытке выполнить 'gfortran *.f -o test' получаю вот что:

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 11
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 7 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 8 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 9 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 10 has invalid symbol index 12
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 11 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 12 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 13 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 14 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 15 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 16 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 17 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 18 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 20 has invalid symbol index 20
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status

Вопросы:

1. Могу ли я использовать gfortran вместо ifort?
2. Если да, то с какими опциями?

Deleted

А про -c кто будет читать за тебя?

Ну и не могу не заметить, что сложностей в получении ifort'а нет никаких.

aedeph_ ★★ ()

1. Могу ли я использовать gfortran вместо ifort?

Можешь, если ты мазохист. Напряги шефов, пусть раскошелятся на intel composer. Бабло-то им на науку выделяют небось? А где оно, Зин?

yvv ★★☆ ()

Для Линукс ifort доступен бесплатно для некоммерческого использования.

Ошибка сейчас не связана с фортраном --- как написали выше, неправильно компилируешь.

anonymous ()
Ответ на: комментарий от anonymous

Из мануала ifort:

-c Prevents linking. It  causes  the  compiler to compile to an object (.o) file only.

как написали выше, неправильно компилируешь.

Я не понимаю, как нужно?

Для Линукс ifort доступен бесплатно для некоммерческого использования.

Знаю, но есть небольшая разница в размерах установки.

Deleted ()

gfortran прекрасно заменяет ifort.

-freal-4-real-8

Не знаю где ты такую опцию нашёл. Согласно моему ману -r8 скорее соответствует -fdefault-real-8. Рекомендую внимательно прочитать про её взаимодействие с -fdefault-double-8.

-O2 и -warn general я могу, видимо, опустить.

-O2 можно и не опускать, она имеет тот же смысл в gfortran, что и в ifort.

ar -r test.a *.o

Здесь создаётся статическая библиотека test.a. Сама программа, по-видимому, в каком-то другом файле. На это же указывает

(.text+0x20): undefined reference to `main'

С чем связаны ошибки с relocation не знаю.

anonymous ()
Ответ на: комментарий от anonymous

gfortran прекрасно заменяет ifort.

Да, чтд, спасибо. Для моего случая это в итоге оказалось так. Это была библиотека. -fdefault-real-8 работает. Исходники собираются отлично с помощью gfortran.

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.