Создание и компиляция программ на Си в 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.2013Unix - полноценная, изначально многопользовательская, многозадачная и многотерминальная операционная система. Особенности архитектуры 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