Создание и компиляция программ на Си в UNIX

Основы создания и компиляции программ на языке С с помощью базовых средств операционной системы UNIX. Написание собственных программ на языке С. Вызов компилятора gcc из командной строки. Управление компиляцией с помощью утилиты make, создание make-файла.

Рубрика Программирование, компьютеры и кибернетика
Вид лекция
Язык русский
Дата добавления 27.11.2013
Размер файла 5,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Задания

1. Основы создания и компиляции программ на языке Си базовыми средствами ОС UNIX

Цель работы: знакомство с основами создания и компиляции программ на языке Си базовыми средствами ОС UNIX.

Теоретическая часть. Написание собственных программ на языке С

Для того чтобы получить собственную программу, нужно написать ее исходный текст на языке С или С++. Файл или файлы с исходным текстом сначала обрабатываются препроцессором, затем то, что получилось, обрабатывается соответственно компилятором С или С++. В результате получаем объектный файл.

В этот объектный файл компоновщик ("линкер") включает объектные файлы из библиотек и в результате получается исполняемый файл - программа.

Итак, для получения приложения исходный текст обрабатывается таким конвейером: препроцессор-компилятор-компоновщик. Эту цепочку удобнее всего вызывать командой gcc.

Удобство создается тем, что у этой команды есть конфигурационные файлы, позволяющие ей задавать по умолчанию оптимальную комбинацию опций для всех перечисленных инструментов кон-вейра (см. каталог /etc/gcc). Давайте напишем хрестоматийную программу, выдающую на экран избитую фразу "Hello, world!". Для этого создадим текстовый файл с именем hello. с и наполним его текстом па языке С:

main ()

{

printf ("Hello, world! \n");

}

Обратите внимание, что мы не потрудились написать директиву препроцессора <stdio. h> - gcc сама "знает", что без заголовочного файла stdio. h не обойтись.

Для того чтобы получить программу hello для Intel-совместимых целевых систем, следует выполнить команду gcc - Vgcc_ntox86 hello. c - o hello

Получить полный список, целевых платформ, для которых можно сгенерировать приложение, можно командой gcc - V

Например, gcc_ntoppcbe - для целевых систем PowerPc BigEndian, а gcc_ntomipsle - для MIPS LittleEndian

На самом деле, по умолчанию и так создается исполняемый файл для аппаратуры х86. Поэтому в рассматриваемом частном случае достаточно ввести такую команду: gcc hello. c - o hello

Запустим программу. Поскольку она вряд ли содержится в переменной ратн, укажем ее относительное путевое имя:. /hе11о

Каталог "точка" (.) - это текущий каталог, т.е. имя. /hе11о обозначает файл hello в текущем каталоге.

Можно добавить в переменную ратн текущий каталог, чтобы интерпретатор всегда сначала "заглядывал" в него и только потом искал в остальных каталогах: РАТН=.: $РАТН

А если эту команду поместить в файл $номе/. profile, то она будет автоматически выполняться перед каждым запуском интерпретатора.

Рассмотрим быть может, глуповатый, но вполне удобный для учебных целей проект. Функция main () определена в файле

main. c:

#include "defs. h"

int main ()

{

printf ("I'm main\n");

aaa ();

return 0;

}

Все, что делает функция main (), - выводит на экран фразу "I'm main", затем вызывает функцию ааа () и завершает работу с кодом возврата 0. В файле main. с есть директива для вставки заголовочного файла defs. h, который содержит объявления функций ааа (), ЬЬЬ () и ссс ():

#ifndef_MY_DEFS_

#define_MY_DEFS_

#ifndef_EXT

#define_EXT extern

#endif // _EXT

_EXT void aaa ();

_EXT void bbb ();

_EXT void ccc ();

#endif // _MY_DEFS_

Директивы препроцессора (все они начинаются с символа #), используемые в defs. h, нужны для избежания многократного включения файла defs. h и конфликтов при объявлении функций в разных комбинациях.

Каждая из этих функций определена в отдельном файле, содержащем директиву включения того же самого заголовочного файла defs. h.

Функция ааа () определена в файле ааа. с. Она выводит на экран текст "I'm ааа" и вызывает функцию bbb ():

#include "defs. h"

void aaa ()

{

printf ("I'm aaa\n");

bbb ();

}

Помните, мы говорили, что для получения исполняемой программы файл с текстом программы на языке С или С++ обрабатывается конвейером, состоящим из инструментов препроцессор - компилятор - компоновщик?

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

Функция bbb () определена в файле ЬЬЬ. с. Она выводит на экран текст "I'm bbb" и вызывает функции ссс ():

#include "defs. h"

void bbb ()

{

printf ("I'm bbb\n")

ccc ();

}

Функция ссс () определена в файле ссс. с и выполняет всего одно действие - выводит на экран текст "I'm ccc":

#include "defs. h"

void ccc ();

{

printf ("I'm ccc\n");

}

Для того чтобы из этих пяти файлов получить программу program, следует выполнить такие команды:

gcc - c main. c

gcc - c aaa. c

gcc - c bbb. c

gcc - c ccc. c

gcc - o program main. o aaa. o bbb. o ccc. o

Выполнение такой цепочки команд называктт сборкой проекта. Если изменить файл ссс. с, то для получения свежей версии программы program потребуется вновь выполнить две последние команды, а если изменить файл main. c, то потребуется повторить первую и последнюю команды. Хорошо еще, что мы не используем многочисленные дополнительные опции, которые могут быть разными для компиляции разных файлов. Конечно, можно было задать одну команду: gcc - o program main. o aaa. o bbb. o ccc. o

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

Практическая часть

Рассмотрим более подробно пример, описанный в теоретической части. Необходимо реализовать программу, в которой имеется 3 исходных файла: main. c, aaa. c, bbb. c. (для простоты файл ccc. c рассматривать не будем). В файле main. c вызывается функция main, выводится на экран строка: "I'm main" и вызывается функция a (). В файле aaa. c выводится на экран строка: "aaa" и вызывается функция b (). В файле bbb. c выводится на экран строка: "bbb". В результате выполнения этой программы на экране должно появиться три строчки. Реализуем эту программу двумя способами:

Вызов компилятора gcc из командной строки

1. Вызываем компилятор gcc из командной строки, поочередно компилируем все исходные файлы, компонуем получившиеся объектные файлы и получаем исполняемый файл.

Исходный файл main. c:

Исходный файл aaa. c:

Исходный файл bbb. c:

Прокомпилируем все исходные файлы:

Скомпонуем все получившиеся объектные файлы в один исполняемый файл "program" и запустим его на исполнение:

Управление компиляцией с помощью утилиты make

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

Создадим make-файл Makefile и запишем в него условие нашей программы:

Можно получить аналогичный make-файл, используя неявные команды компиляции:

Запускаем утилиту make и получившийся исполняемый файл program:

создание компиляция утилита файл

Задание на лабораторную работу: реализовать программу, аналогичную рассмотренной в практической части, в которой используется 3 исходных файла. Во всех файлах производятся определённые элементарные действия с выводом на экран. В первом файле вызывается функция, определённая во втором исходном файле. Во втором файле вызывается функция, определённая в третьем исходном файле. Программу реализовать двумя способами:

1. С вызовом компилятора gcc с поочерёдной компиляцией всех исходных файлов и компоновкой получившихся объектных файлов.

2. С помощью утилиты make и созданием make-файла.

Размещено на Allbest.ru

...

Подобные документы

  • Компиляция программ на языке C/C++. Компиляция нескольких файлов. Библиотеки объектных файлов. Создание статической и динамической библиотеки. Функции работы. Создание динамической библиотеки для решения системы линейных уравнений.

    курсовая работа [27,4 K], добавлен 07.08.2007

  • Хабовая архитектура системных плат. Интерфейс командной строки Unix System V. Структура командной строки интерпретаторов sh и ksh. Системные, процессы-демоны и прикладные процессы. Способы порождения и запуска "демонов". Работа с сигналами UNIX.

    реферат [149,5 K], добавлен 11.05.2012

  • История развития ОС UNIX, ее достоинства. Управление компьютером под управлением UNIX. Интерпретация командной строки и структура файловой системы. Команды управления процессами. Средства системного администрирования и учетные записи пользователей.

    презентация [78,1 K], добавлен 12.05.2014

  • Права доступа к файлам и управление ими и другими атрибутами. Значения прав доступа для файлов и директорий. Набор файловых флагов. Команды управления процессами в операционной системе UNIX. Опции и значения программ архивации и сжатия - tar и gzip.

    контрольная работа [234,4 K], добавлен 16.01.2014

  • Создание программы для перевода кодов с языка Pascal на язык Си. Обработка программ операторами case, assign, rewrite и write. Способы объявления файла, комментария, переменных, логических и арифметических выражений. Виды синтаксических анализаторов.

    курсовая работа [461,0 K], добавлен 03.07.2011

  • История появления операционной системы Unix. Перекомпиляция Unix в коды любой аппаратной платформы, ее многозадачность и многотерминальность. Основные отличия Unix от других операционных систем. Использование Unix в качестве сервера и рабочей станции.

    реферат [28,1 K], добавлен 05.04.2010

  • Основные структуры процессов в операционной системе Unix. Возможные состояния процесса в Unix и способы перехода между ними. Планирование и выполнение процессов. Различия между родительским и дочерним процессом. Ожидание завершения и выполнения процесса.

    курсовая работа [673,0 K], добавлен 24.02.2012

  • Описание файловой системы Unix. Работа основных команд ls, cmp, comm, их ключей. Разработка программного продукта, работающего в среде Windows и представляющего собой эмулятора командного процессора операционной системы Unix. Выбор средств реализации.

    курсовая работа [183,0 K], добавлен 29.04.2015

  • Понятие и использование командной строки. Открытие командной строки. Команды, выполняемые с помощью командной строки. Как выполнить команду с повышенными привилегиями. Изменение внешнего вида окна командной строки с помощью параметров командной строки.

    презентация [948,2 K], добавлен 22.10.2014

  • История развития и отличительные признаки UNIX-системы. Основы информационной безопасности и особенности настройки исследуемой операционной системы, ее достоинства, недостатки и базовые права доступа. Общая характеристика безопасности ядра UNIX.

    реферат [599,5 K], добавлен 18.09.2013

  • Программный комплекс для разработки программы транслирующей программу с языка Pascal на язык С++. Построение логической и арифметической модели решения. Разработка компилятора для программы. Методы отладки программы и создание для нее документации.

    курсовая работа [742,6 K], добавлен 03.07.2011

  • Создание программы для среды UNIX, проверяющей атрибут выполнения файла для текущего пользователя. Особенности прав доступа для каталогов. Командный интерпретатор shell; общий синтаксис скрипта. Установка атрибутов защиты для групп пользователей.

    курсовая работа [18,8 K], добавлен 12.05.2013

  • Анализ уязвимостей в многопоточных программах, написанных на языке С++. Создание программного обеспечения, выполняющего анализ многопоточных программ, написанных на С++, на предмет наличия в них ошибок синхронизации типа "гонки" и "заброшенные замки".

    курсовая работа [755,9 K], добавлен 20.09.2016

  • Создание web-сайта "Мастер по обработке цифровой информации" на языке программирования HTML. Структура и тэги тела документа. Исследование программ, с помощью которых можно написать web-страницы. Особенности работы с файлами разных форматов и расширений.

    курсовая работа [144,2 K], добавлен 31.10.2013

  • Unix - полноценная, изначально многопользовательская, многозадачная и многотерминальная операционная система. Особенности архитектуры Unix, ее два кита - файлы и процессы. Ядро операционной системы, ее файловая система, работа устройств, драйверы.

    реферат [1,0 M], добавлен 22.03.2016

  • Средства интегрированной среды Microsoft Visual Studio, предоставляемые программисту для реализации программ на языке С++. Особенности стиля написания программ. Типовые приемы и методы создания и отладки программ. Листинги программ и их тестирование.

    лабораторная работа [814,3 K], добавлен 26.05.2013

  • Решение задач прикладного программирования. Оформление разработанных алгоритмов в виде графических схем. Написание программ с использованием подпрограмм, их отладка. Блок-схемы и листинг программ. Наборы тестов для отладки разработанных программ.

    курсовая работа [575,8 K], добавлен 06.12.2013

  • Особенности исследования методик объектно-ориентированного проектирования программ с помощью языка UML по формализации, решению поставленной задачи, технологических приемов разработки объектно-ориентированных программ на языке Си++. Разработка программы.

    контрольная работа [188,9 K], добавлен 22.10.2014

  • Определение тем, стилистики и жанров промо-роликов. Создание пяти анимационных видеороликов рекламы колледжа "Угреша" с помощью программ Adobe After Effects, Sony Vegas Pro. Обработка, добавление звукового оформления. Финальная визуализация промо-ролика.

    дипломная работа [5,4 M], добавлен 03.07.2014

  • Схема разбора арифметического и логического выражения. Внешняя спецификация конвертора и алгоритм перевода программ на языке Паскаль в текст на языке Си. Назначение подпрограмм, особенности констант и переменных. Код программы и ее тестирование.

    курсовая работа [567,5 K], добавлен 03.07.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.