Команда ar позволяет использовать утилиту для архивации данных с соответствующим именем. Эта утилита поддерживает собственный формат архивов (.a или .ar). Она достаточно редко используется для архивации обычных файлов, в отличие от популярной утилиты tar. При этом следует отметить, что архивы формата ar в текущее время используются в качестве контейнеров первого уровня в пакетах программного обеспечения формата DEB, а также в качестве контейнеров для хранения файлов объектного кода в статических библиотеках. В случае пакета формата DEB в архиве формата ar хранятся файл с номером версии формата (debian-binary), а также архивы (форматов tar.gz, tar.bz2 или tar.lzma) с описанием пакета программного обеспечения (control) и файлами программного компонента (data).
Базовый синтаксис команды выглядит следующим образом:
$ cpio [параметры] имя_архива файлы...
Для создания архива должен использоваться параметр r, позволяющий заменить существующие или добавить новые файлы в архив (для создания статической библиотеки следует использовать параметр cr). Для извлечения всех файлов из архива предназначен параметр x. Извлеченные файлы будут сохраняться в текущей директории. Если вам нужно получить список всех файлов из архива, вы можете воспользоваться параметром t, причем существует также параметр p, позволяющий вывести содержимое всех находящихся в архиве файлов. Для удаления файла из архива предназначен параметр d.
Для создания архива достаточно использовать параметр r:
$ ar r texts.ar *.txt
ar: создаётся texts.ar
В результате в текущей директории будет создан архив texts.ar
Для вывода списка файлов архива предназначен параметр t:
$ ar t texts.ar
Trushkin_Duel_s_nevidimkoy.187097.txt
Trushkin_Koshki-myishki_s_mafiey.196205.txt
Trushkin_Vse_yavnoe_stanovitsya_taynyim.196206.txt
Вывод списка файлов осуществляется без каких-либо дополнительных данных.
Вывод содержимого файлов архива может осуществляться с помощью параметра p:
$ ar t texts.ar
…
Данная функция полезна исключительно для текстовых файлов малого объема.
Для добавления файлов в архив используется уже рассмотренный параметр r:
$ ar r texts.ar nolf228.jpg
В результате в архиве появится новый файл:
$ ar t texts.ar
Trushkin_Duel_s_nevidimkoy.187097.txt
Trushkin_Koshki-myishki_s_mafiey.196205.txt
Trushkin_Vse_yavnoe_stanovitsya_taynyim.196206.txt
nolf228.jpg
Удаление файлов из архива осуществляется с помощью параметра d:
$ ar d texts.ar nolf228.jpg
В результате указанный файл будет удален из архива:
$ ar t texts.ar
Trushkin_Duel_s_nevidimkoy.187097.txt
Trushkin_Koshki-myishki_s_mafiey.196205.txt
Trushkin_Vse_yavnoe_stanovitsya_taynyim.196206.txt
Для извлечения файлов из архива предназначен параметр x:
$ ar x texts.ar
В результате все извлеченные файлы появятся в текущей директории.
Для создания статической библиотеки следует в первую очередь реализовать саму библиотеку. В нашем случае единственной библиотечной функцией будет функций output(), позволяющая вывести текстовую информацию. Это файл liboutput.c с ее реализацией:
А это заголовочный файл liboutput.h с ее прототипом:
Для создания статической библиотеки следует скомпилировать файл исходного кода и воспользоваться утилитой ar:
$ gcc -c liboutput.c
$ ar cr liboutput.a liboutput.o
Теперь нужно создать код основной программы. Это содержимое файла исходного кода testlib.c:
Теперь нужно скомпилировать программу и связать ее со статической библиотекой:
$ gcc testlib.c -L/home/alexf/nolf228/ -loutput -o testlib
Здесь после параметра -L приведен путь к директории со статической библиотекой, а после параметра -l — имя этой библиотеки без префикса lib. Все остальные параметры компилятора GCC используются без каких-либо изменений.
В результате в текущей директории будет создан бинарный файл с именем testlib. Он использует библиотечную функцию output() и отлично работает:
$ ./testlib
Test
Данный подход может использоваться для распространения бинарных библиотек в том случае, если нет возможности открыть их исходный код. Конечно же, я не рекомендую разрабатывать программное обеспечение с закрытым исходным кодом.