Хрестоматия по программированию на Си в Unix



Простые программы и алгоритмы. Сюрпризы, советы. Хрестоматия по программированию на Си в Unix - стр. 4


Решением проблемы является - задать прототипы (объявления заголовков) всех функций в начале файла (или даже вынести их в header-файл).

#include <stdio.h>

int main(int ac, char *av[]); void f(char *s); unsigned long g(unsigned char *s); ...

Тогда функции будет можно располагать в тексте в любом порядке.

.

Рассмотрим процесс сборки программы из нескольких файлов на языке Си. Пусть мы имеем файлы file1.c, file2.c, file3.c (один из них должен содержать среди других функций функцию main). Ключ компилятора -o заставляет создавать выполняемую программу с именем, указанным после этого ключа. Если этот ключ не задан - будет создан выполняемый файл a.out

cc file1.c file2.c file3.c -o file

Мы получили выполняемую программу file. Это эквивалентно 4-м командам:

cc -c file1.c получится file1.o cc -c file2.c file2.o cc -c file3.c file3.o cc file1.o file2.o file3.o -o file

Ключ -c заставляет компилятор превратить файл на языке Си в "объектный" файл (содержащий машинные команды; не будем вдаваться в подробности). Четвертая команда "склеивает" объектные файлы в единое целое - выполняемую программу. При этом, если какие-то функции, используемые в нашей программе, не были определены (т.е. спрограммированы нами) ни в одном из наших файлов - будет просмотрена библиотека стандартных функций. Если же каких-то функций не окажется и там - будет выдано сообщение об ошибке.

Если у нас уже есть какие-то готовые объектные файлы, мы можем транслировать только новые Си-файлы:

cc -c file4.c cc file1.o file2.o file3.o file4.o -o file

или (что то же самое, но cc сам разберется, что надо делать) cc file1.o file2.o file3.o file4.c -o file

Существующие у нас объектные файлы с отлаженными функциями удобно собрать в библиотеку - файл специальной структуры, содержащий все указанные файлы (все файлы склеены в один длинный файл, разделяясь специальными заголовками, см. include-файл <ar.h>):

ar r file.a file1.o file2.o file3.o

Будет создана библиотека file.a, содержащая перечисленные .o файлы (имена библиотек в UNIX имеют суффикс .a - от слова archive, архив). После этого можно использовать библиотеку:




Содержание  Назад  Вперед