ar (Unix) - ar (Unix)

редактировать
ar
Автор (ы) Кен Томпсон,. Деннис Ритчи. (ATT Bell Laboratories )
Разработчик (и) Различные разработчики с открытым исходным кодом и коммерческие разработчики
Первоначальный выпуск3 ноября, 1971; 48 лет назад (1971-11-03)
Операционная система Unix, Unix-like, V, Plan 9, Inferno
Platform Cross -platform
Тип Команда
формат архиватора
Расширение имени файла .a,.lib,.ar
Тип Интернет-носителя application / x- архив
Магическое число !
Тип форматаформат архива
Контейнер для обычно объектных файлов (.o,.obj)
Стандарт Не стандартизирован, существует несколько вариантов
Открытый формат ?Да

Архиватор, также известный как ar, представляет собой Unix служебная программа, которая поддерживает группы файлов как один архивный файл . Сегодня arобычно используется только для создания и обновления файлов статической библиотеки, которые использует редактор ссылок или компоновщик, а также для создания пакетов.deb для Семейство Debian ; его можно использовать для создания архивов для любых целей, но он в значительной степени заменен на tar для целей, отличных от статических библиотек. Реализация arвключена как одна из GNU Binutils.

В Linux Standard Base (LSB), arустарела и ожидается, что в будущем выпуске этого стандарта он исчезнет. Обоснованием было то, что «LSB не включает утилиты разработки программного обеспечения и не определяет форматы файлов.o и.a».

Содержание
  • 1 Подробности формата файла
    • 1.1 Подпись файла
    • 1.2 Заголовок файла
      • 1.2.1 Вариант BSD
      • 1.2.2 Вариант System V (или GNU)
        • 1.2.2.1 Вариант Windows
    • 1.3 Тонкий архив
  • 2 Пример использования
  • 3 См. Также
  • 4 Ссылки
  • 5 Внешние ссылки
Подробности формата файла
Диаграмма, показывающая пример файловой структуры файла.deb

Формат ar никогда не стандартизировался; современные архивы основаны на общем формате с двумя основными вариантами: BSD и System V (первоначально известный как COFF и также используемый GNU, ELF и Windows.)

Исторически существовали и другие варианты, включая V6, V7, AIX (маленький и большой) и Coherent, которые все они значительно отличаются от общего формата. В архивах

Debian ". deb " используется общий формат.

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

Каждый раздел данных выровнен по 2 байта. Если он будет заканчиваться нечетным смещением, в качестве заполнителя используется новая строка ('\ n', 0x0A).

Подпись файла

Подпись файла - это одно поле, содержащее магическую строку ASCII "!", за которой следует один управляющий символ LF (0x0A).

Заголовок файла

Каждый файл, хранящийся в архиве ar, включает заголовок файла для хранения информации о файле. Общий формат следующий. Числовые значения кодируются в ASCII, и все значения дополняются справа пробелами ASCII (0x20).

СмещениеДлинаИмяФормат
016Идентификатор файлаASCII
1612Отметка времени изменения файлаДесятичный
286Идентификатор владельцаДесятичный
346Идентификатор группыДесятичный
408Режим файла (тип и разрешение)Восьмеричный
4810Размер файла в байтахДесятичный
582Конечные символы0x60 0x0A

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

Члены выровнены по четным границам байтов. «Каждый элемент архивного файла начинается на четной границе байта; при необходимости между файлами вставляется новая строка. Тем не менее, указанный размер отражает фактический размер файла без дополнения».

Из-за ограничений файла длина и формат имени, варианты GNU и BSD разработали разные методы хранения длинных имен файлов. Хотя общий формат не страдает от проблемы 2038 года, многие реализации утилиты ar страдают и могут нуждаться в изменении в будущем для правильной обработки временных меток, превышающих 2147483647. Описание этих расширений приведено ниже. находится в libbfd.

В зависимости от формата многие реализации ar включают глобальную таблицу символов (также известную как armap, каталог или индекс) для быстрого связывания без необходимости сканировать весь архив на предмет наличия символа. POSIX распознает эту функцию и требует, чтобы в реализациях ar была опция -sдля ее обновления. Большинство реализаций помещают его в первую запись файла.

Вариант BSD

BSD ar сохраняет имена файлов, дополненные справа пробелами ASCII. Это вызывает проблемы с пробелами внутри имен файлов. 4.4BSD ar сохраняет расширенные имена файлов, помещая строку «# 1 /», за которой следует длина имени файла в поле имени файла, и сохраняет реальное имя файла перед разделом данных.

Утилита BSD ar традиционно не обрабатывает построение глобальной таблицы поиска символов и делегирует эту задачу отдельной утилите с именем ranlib, которая вставляет специфичный для архитектуры файл с именем __. SYMDEFкак первый член архива. Некоторые потомки ставят после имени пробел и «СОРТИРОВАНО», чтобы указать отсортированную версию. 64-битный вариант под названием __. SYMDEF_64существует на Darwin.

, поскольку POSIX добавил требование для параметра -sв качестве замены ranlib, однако более новый BSD Реализации ar были переписаны, чтобы иметь эту функцию. FreeBSD, в частности, отказалась от формата таблицы SYMDEF и приняла таблицу стилей System V.

Вариант System V (или GNU)

System V ar использует символ '/' (0x2F) для обозначения конец имени файла; это позволяет использовать пробелы без использования расширенного имени файла. Затем он сохраняет несколько расширенных имен файлов в разделе данных файла с именем «//», на эту запись будут ссылаться будущие заголовки. Заголовок ссылается на расширенное имя файла, сохраняя "/" с последующим десятичным смещением до начала имени файла в разделе данных расширенного имени файла. Формат этого файла «//» представляет собой просто список длинных имен файлов, каждое из которых разделено одним или несколькими символами LF. Обратите внимание, что десятичные смещения - это количество символов, а не номер строки или строки в файле "//". Обычно это вторая запись файла после таблицы символов, которая всегда является первой.

System V ar использует специальное имя файла "/" для обозначения того, что следующая запись данных содержит таблицу поиска символов, которая используется в библиотеках ar для ускорения доступа. Эта таблица символов состоит из трех частей, которые записываются вместе как непрерывные данные.

  1. 32-битное целое число с прямым порядком байтов, указывающее количество записей в таблице.
  2. Набор 32-битных целых чисел с прямым порядком байтов. По одному для каждого символа, записывающего позицию в архиве заголовка файла, содержащего этот символ.
  3. Набор строк с нулевым завершением. Каждый из них представляет собой имя символа и встречается в том же порядке, что и список позиций в части 2.

Некоторые системы System V не используют описанный выше формат для таблицы поиска символов. Для таких операционных систем, как HP-UX 11.0, эта информация хранится в структуре данных на основе формата файла SOM.

Специальный файл "/" не заканчивается определенной последовательностью; конец предполагается после того, как будет прочитано последнее имя символа.

Чтобы преодолеть ограничение на размер файла в 4 ГиБ, некоторые операционные системы, такие как Solaris 11.2 и GNU, используют поисковую таблицу вариантов. Вместо 32-битных целых чисел в таблицах поиска символов используются 64-битные целые числа. Строка «/ SYM64 /» вместо «/» используется в качестве идентификатора для этой таблицы

Вариант Windows

Вариант Windows (PE / COFF) основан на варианте SysV / GNU. Первая запись «/» имеет ту же структуру, что и таблица символов SysV / GNU. Вторая запись - это еще один символ «/», расширение Microsoft ECOFF, в котором хранится расширенная таблица перекрестных ссылок символов. Этот отсортирован и использует целые числа с прямым порядком байтов. Третья запись - это необязательные данные с длинным именем «//», как в SysV / GNU.

Тонкий архив

Версия arв GNU binutils и elfutils имеет дополнительный формат «тонкого архива» с магическим числом ! . Тонкий архив содержит только таблицу символов и ссылки на файл. Формат файла - это, по сути, архив формата System V, где каждый файл хранится без разделов данных. Каждое имя файла сохраняется как «длинное» имя файла, и они должны быть разрешены, как если бы они были символическими ссылками.

Пример использования

Чтобы создать архив из файлов class1.o, class2.o, class3.o, будет использоваться следующая команда:

ar rcs libclass.a class1.o class2.o class3.o

компоновщики Unix, обычно вызывается через C компилятор cc, может читать файлы arи извлекать из них объектные файлы, поэтому если libclass.a- это архив, содержащий class1.o, class2.oи class3.o, затем

cc main.c libclass. a

или (если libclass.a помещен в путь стандартной библиотеки, например, / usr / local / lib)

cc main.c -lclass

или (во время связывания)

ld... main.o -lclass...

совпадает с:

cc main.c class1.o class2.o class3.o
См. также
Ссылки
Внешние ссылки
Wikibook Руководство по Unix есть страница e по теме: Команды
Последняя правка сделана 2021-06-11 23:03:19
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте