Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
17
Добавлен:
01.05.2014
Размер:
105.47 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ

ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

КАФЕДРА МОЭВМ

ОТЧЕТ

ПО ЛАБОРАТОРНОЙ РАБОТЕ №2

«Создание make-файла»

по дисциплине

«Операционные системы»

Вариант №8

Преподаватель: Алексеев А.Н.

Выполнил СТ. ГР. 3351 ФКТИ: Чепас А.С.

САНКТ-ПЕТЕРБУРГ

2005

1. Постановка задачи

- Написать программу, решающую задачу в соответствии с выданным вариантом. Входные параметры задаются с клавиатуры. Формат ввода и ограничения определяется самостоятельно.

- Написать файл с набором правил сборки и линковки программы (Makefile) с целями all и clean. По all программа должна собираться, а по clean удалять все созданные бинарные файлы.

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

- Для любой функции программы получить с помощью утилиты objdump ее бинарный и ассемблерный код с соответствующими сороками на С.

- С помощью утилиты objdump, определить в какой секции хранятся символьные строки, и в какой исполняемый код программы.

- Вывести ELF заголовок программы с помощью утилиты readelf

Вариант 8

Отсортировать последовательность введенных строк в лексикографическом порядке. Входные параметры: количество строк и сами строки.

2. Реализация поставленной задачи

С клавиатуры вводится количество элементов, то есть строк. Далее вводятся сами строки причем с указанием длины каждой из них. Строки представляются в виде двухмерного массива элементов типа char. В головной программеOS_INPUT.Cтри процедуры, описанные в отдельном файлеOS2.C. Это процедура ввода, выполнения, то есть сортировки и вывода на экран. Также есть файлOS2.H, в котором описаны заголовки процедур. Теперь необходимо это 3 файла соединить в один объектный и т.д.

3. Текст программы

//os_input.c

#include <iostream>

#include "os2.h"

int main(void)

{

//Ввод

input();

//Реализация

realize();

//Вывод

output();

return 0;

};

//os2.c

#include "os2.h"

#include <iostream>

// Ввод

char stroka[10][10];

int n;

void input(void)

{ int n1;

std::cout<<"Число строк"<<"\n";

std::cin>>n;

for (int i=1; i<=n; i++)

{std::cout<< "строка № " << i <<"\n" ;

std::cout<<"Число букв в строке"<<"\n";

std::cin>>n1;

for (int j=1; j<=n1; j++)

{

std::cin>>stroka[i][j];

}

for (int j1=n1+1; j1<=10; j1++)

stroka[i][j1]=' ';

}

};

//Обработка

void realize(void)

{

int f,k;

char p;

for (int i=1; i<=n; i++)

{

for (int j=n; j>=i+1; j--)

{

f=0;

k=1;

while (((stroka[i][k]!=' ') || (stroka[j][k]!=' ')) && (f==0))

{

if (stroka[i][k]>stroka[j][k])

{f=1;}

else if (stroka[i][k]==stroka[j][k])

{f=0;}

else {f=2;}

k++;

}

if (f==1)

{

for (int k=1; k<=10; k++)

{

p=stroka[j][k];

stroka[j][k]=stroka[i][k];

stroka[i][k]=p;

};

};

};

};

};

//Вывод

void output(void)

{

for (int i=1; i<=n; i++)

{

for (int j=1; j<=10; j++)

{

std::cout<<stroka[i][j];

};

std::cout<<"\n";

};

}

//os2.h

void input(void);

void realize(void);

void output(void);

4. Make-файл

Создали makefile:mp.makefileс целямиallиclean. Он автоматически собирает программу:

make –f mp.makefile all. И удаляет промежуточные файлы:make–fmp.makefileclean.

Текст файла mp.makefile:

all: myprog

myprog: os_input.o os2.o

g++ os_input.o os2.o -o myprog

os_input.o: os_input.c os2.h

g++ -g -Wall -c os_input.c

os2.o: os2.c os2.h

g++ -g -Wall -c os2.c

clean:

rm os_input.o

rm os2.o

rm myprog

Ключи g++:

-c

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

-g

Сгенерировать дополнительную информацию для отладчика sdb(1).

Включить оптимизацию объектного кода.

-L каталог

Дополнить каталогом список каталогов, которые содержат объектные библиотечные модули

-l библиотека

Скомпоновать с объектной библиотекой

-I каталог

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

Соседние файлы в папке Лабораторная работа №23