Материал: Аверянов Введение в оператсионные системы и основы программирования 2015

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

gfortran hello.f95

В этом случае, если исходный файл hello.f95 не содержит ошибок, в текущей директории будет создан исполнимый файл с именем: a.out – если используется какой-либо коммандер, то это сразу будет видно в таблице; иначе придется воспользоваться командой операционной системы:

ls (для Linux)

dir (для Windows)

Для запуска файла из командной строки Linux необходимо явное указание на текущую директорию: – «./». При запуске из командной строки Windows в этом нет необходимости:

./a.out (для Linux)

a (для Windows)

После запуска, на экране появится текст:

HELLO, WORLD

Если в процессе компиляции обнаружится наличие ошибок в тексте программы, то необходимо их исправить, а затем повторить процесс компиляции.

Создание исполняемого файла с заданным именем. Наиболее часто возникает ситуация, когда исполняемому файлу программы требуется присвоить такое же имя, как и у исходного файла. Для этого у компилятора Gfortran имеется специальная опция «–o имя», важно не перепутать латинскую букву «о» с нулем! Эту опцию можно указать в любом месте списка параметров компилятора

Gfortran, например:

gfortran -o hello hello.f95

или

gfortran hello.f95 -o hello

Правильное выполнение этой команды приведет к созданию исполнимого файла с именем hello (или hello.exe), который затем можно запустить обычным образом:

131

./hello (для Linux)

hello или hello.exe (для Windows)

Типичной ошибкой, на которую стоит обратить внимание, является попытка запустить исходный файл вместо исполняемого файла, т.е. в командной строке набирают ./hello.f95 вместо ./hello и т.д.

Пример 3.16. Программные компоненты в одномфайле

program MESSAGE

! В файле hello.f95

call HELLO

 

end

 

subroutine HELLO!

! В файле hello.f95

print*, 'HELLO,^WORLD'

 

end

 

Исходный файл может содержать несколько программных компонент – одну основную программу подпрограмму или несколько. Основная программа MESSAGE (пример 3.16) вызывает подпрограмму HELLO, печатающую уже знакомое текстовое сообщение «HELLO, WORLD». Для вызова подпрограммы используется опе-

ратор CALL (см. п. 3.7).

Поскольку все программные компоненты находятся в одном файле, то в написании и трансляции программы ничего не изменяется – создается исходный файл, например: message.f95, в котором размещается главная программа MESSAGE и подпрограмма HELLO, а затем исходный файл компилируется точно так же, как исходный файл hello.f95 в предыдущих примерах:

gfortran -o message message.f95

или же

gfortran message.f95 -o message

3.2.3. Трансляция нескольких исходных файлов

Программныекомпоненты одной программы могут размещаться отдельно в нескольких исходных файлах. Основная программа

132

MESSAGE может размещаться в файле message.f95 (пример 3.17), а подпрограмма HELLO в файле hello.f95 (пример 3.18).

Пример 3.17. Файл message.f95

program MESSAGE ! В файле hello.f95 call HELLO

end

Пример 3.18. Файл hello.f95

subroutine HELLO ! В файле hello.f95 print*, 'HELLO,^WORLD'

end

Компиляция с созданием исполняемого файла. При трансля-

ции имена исходных файлов перечисляются в произвольном порядке, а опция «–о massage» определяет имя исполняемого файла:

gfortran -о massage hello.f95 message.f95

или

gfortran message.f95 hello.f95 -о massage

Напомним, что в принципе исполняемый файл может называться как угодно, но во избежание путаницы его, как правило, именуют так же, как и главную программу.

Компиляция с созданием объектных файлов. В ряде случаев интерес может представлять компиляция исходных файлов с их преобразованием в машинный код, без сборки исполняемого файла. Для этого компилятор gfortran необходимо запустить с опцией «–c», т.е. только компиляция. Файлы могут компилироваться по одному или по нескольку:

gfortran -c hello.f95

gfortran -c message.f95

или

133

gfortran -c hello.f95 message.f95

В любом случае результатом будет появление в текущей директории объектных файлов: hello.о и message.о, из которых затем можно осуществить сборку исполняемого файла так же, как из исходников:

gfortran -o massage hello.o message.o

Исходные файлы всегда сначала компилируются в объектные файлы, а уже затем из объектных файлов специальной программой, называемой редактором связей или линкером (линковщиком), осуществляется сборка исполняемого файла. Транслятор gfortran просто скрывает этот этап (если текста программ в исходных файлах достаточно для полного цикла генерации исполняемого файла).

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

Компилятор gfortran поддерживает смешанную обработку исходных и объектных файлов, которые могут быть перечислены через пробел в любом порядке:

gfortran -o message hello.o message.f95

или

gfortran -o message hello.f95 message.o

Для получения более полных сведений о возможностях транслятора Gfortran следует воспользоваться опцией «--help»:

gfortran --help

134

3.2.4. Трансляция модулей

Исходный файл, содержащий модуль (пример 3.19), необходимо компилировать с опцией «-c» (только компиляция):

gfortran -c vector_arithmetic.f95

Успешное выполнение этой команды приведет к появлению в текущей директории специализированного файла структуры модуля

(vector_arithmetic.mod) и объектного файла (vector_arithmetic.o),

который затем необходимо транслировать вместе с использующей его программой (см. пример 3.19) по уже известным правилам трансляции программы, расположенной в нескольких файлах:

gfortran -o vector_test vector_test.f95 vector_arithmetic.o

или

gfortran -o vector_test vector_arithmetic.o vector_test.f95

Пример 3.19. Модуль – контейнервекторной арифметики module VECTOR_ARITHMETIC

type VECTOR real X, Y

end type VECTOR interface operator(+)

module procedure ADD_VECTORS end interface

contains

function ADD_VECTORS(A,B) type(VECTOR) ADD_VECTORS type(VECTOR), intent(in) :: A, B ADD_VECTORS%X = A%X +B%X ADD_VECTORS%Y = A%Y +B%Y end function ADD_VECTORS

end module VECTOR_ARITHMETIC

Возможна трансляция с использованием только исходных файлов, но при этом важна очередность их следования – первым должен быть указан файл, содержащий модуль, и только затем указывается исходный файл программы, использующей это модуль:

135

Источник: https://studfile.net/preview/16708824/