ar - справочное руководство, опции, примеры команд


ИМЯ

ar - создавать, изменять и извлекать из архивов

СИНТАКСИС

ar [-X32_64] [-]p[mod] [--plugin name] [--target bfdname] [--output dirname] [--record-libdeps libdeps] [--thin] [relpos] [count] archive [member...]

ОПИСАНИЕ

Программа GNU ar создает, изменяет и извлекает из архивов. архив – это отдельный файл, содержащий набор других файлов в структуре, позволяющей извлекать исходные отдельные файлы (называемые элементами архива).

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

GNU ar может поддерживать архивы, члены которых имеют имена любой длины; однако, в зависимости от того, как ar настроен в вашей системе, может быть наложено ограничение на длину имени участника для совместимости с форматами архивов, поддерживаемых другими инструментами. Если он существует, ограничение часто составляет 15 символов (типично для форматов, связанных с a.out) или 16 символов (типично для форматов, связанных с coff).

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

ar создает индекс для символов, определенных в перемещаемых объектных модулях в архиве, когда вы указываете модификатор s. После создания этот индекс обновляется в архиве каждый раз, когда ar изменяет его содержимое (за исключением операции обновления q). Архив с таким индексом ускоряет связывание с библиотекой и позволяет подпрограммам в библиотеке вызывать друг друга независимо от их размещения в архиве.

Вы можете использовать nm -s или nm --print-armap, чтобы получить список этой индексной таблицы. Если в архиве отсутствует таблица, можно использовать другую форму ar, называемую ranlib, чтобы добавить только таблицу.

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

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

Тонкие архивы также выравниваются, поэтому добавление одного тонкого архива в другой тонкий архив не приводит к его вложению, как это произошло бы с обычным архивом. Вместо этого элементы первого архива добавляются во второй архив по отдельности.

Пути к элементам архива хранятся относительно самого архива.

GNU ar предназначен для совместимости с двумя разными средствами. Вы можете управлять его активностью с помощью параметров командной строки, таких как различные варианты ar в системах Unix; или, если вы укажете единственную опцию командной строки -M, вы сможете управлять ею с помощью сценария, поставляемого через стандартный ввод, например библиотечной программы МРТ.

ПАРАМЕТРЫ

GNU ar позволяет смешивать код операции p и флаги модификатора mod в любом порядке в первом аргументе командной строки.

При желании вы можете начать первый аргумент командной строки с дефиса.

Ключевая буква p указывает, какую операцию выполнять; это может быть любой из следующих, но вы должны указать только один из них:

  1. Удалить модули из архива. Укажите имена удаляемых модулей как member...; архив останется нетронутым, если вы не укажете файлы для удаления. Если вы укажете модификатор v, ar перечислит каждый модуль по мере его удаления.

  2. Используйте эту операцию для перемещения участников в архиве. Порядок элементов в архиве может повлиять на то, как программы связываются с использованием библиотеки, если символ определен более чем в одном элементе. Если с m не используются никакие модификаторы, все элементы, указанные вами в аргументах member, перемещаются в конец архива; вместо этого вы можете использовать модификаторы a, b или i, чтобы переместить их в указанное место.

  3. Печать указанных элементов архива в стандартный выходной файл. Если указан модификатор v, покажите имя элемента перед копированием его содержимого в стандартный вывод. Если вы не укажете аргументы member, будут напечатаны все файлы в архиве.

  4. Быстрое добавление; Раньше файлы member... добавлялись в конец архива без проверки замены. Модификаторы a, b и i не влияют на эту операцию; новые члены всегда помещаются в конец архива. Модификатор v заставляет ar перечислять каждый файл по мере его добавления. Поскольку целью этой операции является скорость, реализации ar имеют возможность не обновлять таблицу символов архива, если она существует. Однако слишком много разных систем предполагают, что таблицы символов всегда актуальны, поэтому GNU ar перестроит таблицу даже при быстром добавлении. Примечание. GNU ar рассматривает команду qs как синоним r — замена уже существующих файлов в архиве и добавление новых в конце.

  5. Вставьте файлы member... в архивзаменой). Эта операция отличается от q тем, что все ранее существовавшие элементы удаляются, если их имена совпадают с именами добавляемых. Если один из файлов с именем в member... не существует, ar отображает сообщение об ошибке и не затрагивает все существующие элементы архива, соответствующие этому имени. По умолчанию новые члены добавляются в конец файла; но вы можете использовать один из модификаторов a, b или i, чтобы запросить размещение относительно какого-либо существующего члена. Модификатор v, используемый с этой операцией, вызывает строку вывода для каждого вставленного файла вместе с одной из букв a или r, чтобы указать, следует ли файл был добавлен (старый элемент не удален) или заменен.

  6. Добавьте индекс в архив или обновите его, если он уже существует. Обратите внимание, что эта команда является исключением из правила, согласно которому может быть только одна командная буква, поскольку ее можно использовать как команду или модификатор. В любом случае он делает то же самое.

  7. Отобразить таблицу со списком содержимого архива или файлов, перечисленных в member..., которые присутствуют в архиве. Обычно отображается только имя элемента, но если указан модификатор O, то также отображается соответствующее смещение элемента. Наконец, чтобы увидеть режимы (разрешения), отметку времени, владельца, группу и размер, необходимо включить модификатор v. Если вы не укажете участника, будут перечислены все файлы в архиве. Если в архиве (скажем, b.a) есть несколько файлов с одинаковым именем (скажем, fie), список art b.a fie только первый экземпляр; чтобы увидеть их все, вы должны запросить полный список — в нашем примере это art b.a.

  8. Извлеките участников (с именем member) из архива. Вы можете использовать модификатор v с этой операцией, чтобы запросить, чтобы ar отображал каждое имя по мере его извлечения. Если вы не укажете участника, будут извлечены все файлы в архиве. Файлы не могут быть извлечены из тонкого архива, и существуют ограничения на извлечение из архивов, созданных с помощью P: пути не должны быть абсолютными, не могут содержать .. и любые подкаталоги в путях должны существовать. Если желательно избежать этих ограничений, используйте параметр --output для указания выходного каталога.

Ряд модификаторов (mod) может следовать сразу за ключевой буквой p, чтобы указать варианты поведения операции:

  1. Добавляйте новые файлы после существующего члена архива. Если вы используете модификатор a, имя существующего члена архива должно быть представлено в качестве аргумента relpos перед спецификацией archive.

  2. Добавляйте новые файлы перед существующим элементом архива. Если вы используете модификатор b, имя существующего члена архива должно быть представлено в качестве аргумента relpos перед спецификацией archive. (то же, что и i).

  3. Создайте архив. Указанный архив всегда создается, если он не существует, когда вы запрашиваете обновление. Но предупреждение выдается, если вы заранее не укажете, что собираетесь его создать, используя этот модификатор.

  1. Работа в детерминированном режиме. При добавлении файлов и индекса архива используйте ноль для UID, GID, меток времени и используйте согласованные файловые режимы для всех файлов. При использовании этого параметра, если ar используется с идентичными параметрами и идентичными входными файлами, несколько запусков будут создавать идентичные выходные файлы независимо от владельцев, групп, режимов файлов или времени модификации входных файлов. Если binutils был настроен с --enable-deterministic-archives, то этот режим включен по умолчанию. Его можно отключить с помощью модификатора U ниже.

  1. Сократите имена в архиве. GNU ar обычно разрешает имена файлов любой длины. Это приведет к созданию архивов, несовместимых с собственной программой ar в некоторых системах. Если это вызывает беспокойство, можно использовать модификатор f для сокращения имен файлов при их помещении в архив.

  1. Вставьте новые файлы перед существующим элементом архива. Если вы используете модификатор i, имя существующего члена архива должно быть представлено в качестве аргумента relpos перед спецификацией archive. (то же, что и b).

  1. Укажите зависимости этой библиотеки. Зависимости должны следовать сразу за этим символом параметра, должны использовать тот же синтаксис, что и командная строка компоновщика, и должны быть указаны в одном аргументе. То есть, если требуется несколько элементов, они должны быть заключены в кавычки, чтобы сформировать один аргумент командной строки. Например, L -L/usr/local/lib -lmydep1 -lmydep2

  1. Использует параметр count. Это используется, если в архиве есть несколько записей с одинаковым именем. Извлеките или удалите экземпляр count с заданным именем из архива.

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

  1. Отображение смещений членов внутри архива. Используйте вместе с опцией t.

  2. Используйте полное имя пути при сопоставлении или сохранении имен в архиве. Архивы, созданные с полными путями, несовместимы с POSIX и поэтому могут не работать с инструментами, отличными от современных инструментов GNU. Изменение таких архивов с помощью GNU ar без использования P удалит полные имена путей, если архив не является тонким архивом. Обратите внимание, что P может быть полезен при добавлении файлов в тонкий архив, поскольку r без P игнорирует путь при выборе элемента для замены. Таким образом, ar rcST archive.a subdir/file1 subdir/file2 file1 приведет к замене первого subdir/file1 на file1 из текущего каталога. Добавление P предотвратит эту замену.

  1. Запишите индекс объектного файла в архив или обновите существующий, даже если в архив не внесено никаких других изменений. Вы можете использовать этот флаг-модификатор либо с любой операцией, либо отдельно. Запуск ar s в архиве эквивалентен запуску в нем ranlib.

  1. Не создавайте архивную таблицу символов. Это может ускорить создание большой библиотеки в несколько шагов. Полученный архив нельзя использовать с компоновщиком. Чтобы построить таблицу символов, вы должны опустить модификатор S при последнем выполнении ar или запустить ranlib в архиве. .

  2. Устаревший псевдоним для --thin. T не рекомендуется, поскольку во многих реализациях ar T имеет другое значение, как указано в X/Open System Interface.

  1. Обычно ar r... вставляет в архив все перечисленные файлы. Если вы хотите вставить только те файлы из списка, которые являются более новыми, чем существующие элементы с теми же именами, используйте этот модификатор. Модификатор u разрешен только для операции r (заменить). В частности, комбинация qu недопустима, так как проверка временных меток приведет к потере преимущества в скорости от операции q.

  1. Не не работать в детерминированном режиме. Это действие, обратное модификатору D, приведенному выше: добавленные файлы и индекс архива получат свои фактические значения UID, GID, метки времени и режима файла. Это значение по умолчанию, если только binutils не был настроен с --enable-deterministic-archives.

  1. Этот модификатор запрашивает подробную версию операции. Многие операции отображают дополнительную информацию, например имена обработанных файлов, если к ним добавляется модификатор v.

  1. Этот модификатор показывает номер версии ar.

Программа ar также поддерживает некоторые параметры командной строки, которые не являются ни модификаторами, ни действиями, но определенным образом изменяют ее поведение:

--help

Отображает список параметров командной строки, поддерживаемых ar, а затем завершает работу.

--version

Отображает информацию о версии ar, а затем завершает работу.

-X32_64

ar игнорирует начальный параметр, записанный как -X32_64, для совместимости с AIX. Поведение, создаваемое этой опцией, является поведением по умолчанию для GNU ar. ar не поддерживает никакие другие опции -X; в частности, он не поддерживает -X32, который используется по умолчанию для AIX ar.

--plugin name

Необязательный ключ командной строки --plugin name заставляет ar загрузить подключаемый модуль с именем name, который добавляет поддержку больше форматов файлов, включая объектные файлы с информацией об оптимизации времени компоновки. Этот параметр доступен только в том случае, если цепочка инструментов была собрана с включенной поддержкой плагинов. Если --plugin не указан, но включена поддержка плагинов, то ar перебирает файлы в $ {libdir}/bfd-plugins в алфавитном порядке, и используется первый плагин, заявивший о рассматриваемом объекте. Обратите внимание, что этот каталог поиска плагинов не используется опцией -plugin в ld. Чтобы заставить ar использовать подключаемый модуль компоновщика, его необходимо скопировать в каталог $ {libdir}/bfd-plugins. Для компиляций на основе GCC подключаемый модуль компоновщика называется liblto_plugin.so.0.0.0. Для компиляций на основе Clang он называется LLVMgold.so. Плагин GCC всегда обратно совместим с более ранними версиями, поэтому достаточно просто скопировать самую новую версию.

--target target

Необязательный ключ командной строки --target bfdname указывает, что элементы архива имеют формат объектного кода, отличный от формата вашей системы по умолчанию. Видеть

--output dirname

Параметр --output может использоваться для указания пути к каталогу, в который должны быть извлечены члены архива. Если этот параметр не указан, будет использоваться текущий каталог. Примечание. Хотя наличие этого параметра подразумевает операцию извлечения x, этот параметр все равно должен быть включен в командную строку.

--record-libdeps libdeps

Параметр --record-libdeps идентичен модификатору l, только обрабатывается в длинной форме.

--thin

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

  1. Чтение параметров командной строки из файла. Прочитанные параметры вставляются вместо исходного параметра @file. Если файл не существует или не может быть прочитан, параметр будет рассматриваться буквально и не будет удален. Параметры в файле разделены пробелом. Пробельный символ может быть включен в параметр, заключая весь параметр в одинарные или двойные кавычки. Любой символ (включая обратную косую черту) может быть включен путем добавления к включаемому символу обратной косой черты. Сам файл может содержать дополнительные параметры @file; любые такие параметры будут обрабатываться рекурсивно.

СМОТРИТЕ ТАКЖЕ

nm (1), ranlib (1), and the Info entries for binutils.

АВТОРСКИЕ ПРАВА

Авторское право (c) 1991-2023 Free Software Foundation, Inc.

Разрешается копировать, распространять и/или изменять этот документ в соответствии с условиями лицензии GNU Free Documentation License версии 1.3 или любой более поздней версии, опубликованной Free Software Foundation; без неизменяемых разделов, без текста на передней обложке и без текста на задней обложке. Копия лицензии включена в раздел, озаглавленный Лицензия свободной документации GNU.