Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Рис. 3.2.. Схема подготовки исполняемой программы в Unix:
*.c исходный модуль на языке Си
*.a модуль на ассемблере
*.o объектный модуль
a.out стандартное имя исполняемого файла
cc компилятор языка Си
as компилятор языка ассемблера
ld компоновщик (редактор связей)
Компилятор языка Си позволяет за один вызов выполнить всю цепочку преобразования исходного модуля в исполняемую программу. Исходный модуль транслируется в модуль на языке ассемблера, затем создается объектный модуль и компоновщик производит исполняемый файл со стандартным именем a.out. Для подключения к исполняемой программе функций ввода-вывода, математических функций и т.п., компоновщик использует различные библиотеки объектных модулей.
Выбор фиксированного имени исполняемого модуля (a.out) объясняется тем, что в режиме отладки программ нет необходимости хранить промежуточные версии исполняемых программ и вполне можно называть их одним именем.
Формат команды cc, вызывающей компилятор языка Си, предусматривает задание следующих параметров (в форматах команд операционных систем принято помещать необязательные элементы в квадратные скобки [ ]):
cc [-ключи] исходные_модули [ключи_компоновщика]
[объектные_модули] [библиотеки]
где
ключи - однобуквенные параметры, задающие режимы работы компилятора. перед каждым ключом должен стоять знак минус ('-'). После некоторых ключей могут указываться дополнительные параметры. Приведем некоторые (наиболее часто употребляемые) ключи команды cc:
-c - транслировать исходный модуль в объектный;
-p - провести только препроцессорную обработку исходного модуля;
-s - транслировать исходный модуль в модуль на языке ассемблера;
-o имя_исполняемой_программы - при необхрдимости транслировать и задать произвольное (отличное от стандартного "a.out") имя для исполняемой программы;
исходные_модули - полные имена (с расширением "c") одного или нескольких исходных модулей;
объектные_модули - полные имена (с расширением "o") тех модудей которые будут использованы при построении исполняемой программы;
ключи компоновщика - задают режимы работы компоновщика (для нас представляет интерес ключ -l, определяющий имя библиотеки объектных модулей):
-lбиблиотека_объектных_модулей
Если программа состоит их одного исходного модуля, то для построения исполняемого модуля достаточно выполнить команду
%cc prog.c
Примечание. Компилятор cc предполагает, что исходный модуль на языке Си имеет обязательное расширение .c.
Исходный модуль prog.c будет последовательно преобразован в модуль на языке ассемблера, объектный модуль, исполняемый модуль. Исполняемый модуль получит стандартное имя a.out. При повторном вызове компилятора языка Си командой cc и указания в качестве параметра команды имени другого исходного модуля вновь полученный исполняемый модуль также будет иметь имя a.out, но будет соответствовать другому исходному (только что обработанному) модулю.
Для того чтобы определить произвольное имя исполняемого модуля, необходимо в команде вызова компилятора указать ключ -o и сразу за ним через пробел задать имя исполняемого модуля:
%cc -o begin prog.c
построение исполняемого модуля можно провести в два этапа с промежуточным получением объектного модуля:
%cc -c prog.c
%cc -o begin prog.o
В первой строке применен ключ -с, в результате чего процесс обработки исходного модуля прервется, когда будет получен объектный модуль (prog.o).
Во второй строке определено имя исполняемого модуля begin и в качестве параметра команды cc указано имя объектного модуля (prog.o), полученного на предыдущем этапе.