Основы программирования в Linux | страница 23



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

Упражнение 1.2. Статические библиотеки

В этом упражнении вы создадите свою маленькую библиотеку, содержащую две функции, и затем используете одну из функций в примере программы. Функции называются fred и bill и просто выводят приветствия.

1. Сначала создайте отдельные исходные файлы (как не удивительно, названные fred.c и bill.c) для каждой функции.

Далее приведен первый из них:

>#include

>void fred(int arg) {

> printf("fred: you passed %d\n", arg);

>}

А это второй:

>#include

>void bill(char *arg) {

> printf("bill: you passed %s\n", arg);

>}

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

>$ gcc -с bill.с fred.c

>$ ls *.o

>bill.о fred.о

3. Теперь напишите программу, вызывающую функцию >bill. Прежде всего, хорошо бы создать заголовочный файл для вашей библиотеки. В нем будут объявлены функции из вашей библиотеки, и он будет включаться во все приложения, которые захотят применить вашу библиотеку. В файлы fred.c и bill.c тоже хорошо бы включить заголовочный файл, чтобы помочь компилятору обнаружить любые ошибки.

>/*

> Это файл lib.h. В кем объявлены пользовательские функции fred and bill

>*/[1]

>void bill(char *);

>void fred(int);

4. Вызывающая программа (program.с) может быть очень простой. Она включает заголовочный файл и вызов из библиотеки одной из функций.

>#include

>#include "lib.h"


>int main() {

> bill("Hello World");

> exit(0);

>}

5. Теперь можно откомпилировать и протестировать программу. Для этого задайте компилятору явно объектные файлы и попросите его откомпилировать ваш файл и связать его с ранее откомпилированным объектным модулем bill.o.

>$ gcc -с program.с

>$ gcc -о program program.о bill.о

>$ ./program

>bill: we passed Hello World

>$

6. Для создания архива и включения в него ваших объектных файлов используйте программу ar. Программа называется ar, поскольку она создает архивы или коллекции отдельных файлов, помещая их все в один большой файл. Имейте в виду, что программу ar можно применять для создания архивов из файлов любого типа. (Как многие утилиты UNIX, ar — универсальное средство.)