ar - manual de referencia, opciones, ejemplos de comandos


NOMBRE

ar - crear, modificar y extraer de archivos

SINOPSIS

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

DESCRIPCIÓN

El programa GNU ar crea, modifica y extrae archivos. Un archivo es un único archivo que contiene una colección de otros archivos en una estructura que hace posible recuperar los archivos individuales originales (llamados miembros del archivo).

El contenido, el modo (permisos), la marca de tiempo, el propietario y el grupo de los archivos originales se conservan en el archivo y se pueden restaurar al extraerlos.

GNU ar puede mantener archivos cuyos miembros tengan nombres de cualquier longitud; sin embargo, dependiendo de cómo esté configurado ar en su sistema, se puede imponer un límite en la longitud del nombre de miembro para la compatibilidad con los formatos de archivo mantenidos con otras herramientas. Si existe, el límite suele ser de 15 caracteres (típico de formatos relacionados con a.out) o 16 caracteres (típico de formatos relacionados con coff).

ar se considera una utilidad binaria porque los archivos de este tipo se utilizan con mayor frecuencia como bibliotecas que contienen subrutinas comúnmente necesarias. Dado que las bibliotecas a menudo dependerán de otras bibliotecas, ar también puede registrar las dependencias de una biblioteca cuando se especifica la opción --record-libdeps.

ar crea un índice para los símbolos definidos en módulos de objetos reubicables en el archivo cuando especifica el modificador s. Una vez creado, este índice se actualiza en el archivo cada vez que ar realiza un cambio en su contenido (excepto para la operación de actualización q). Un archivo con dicho índice acelera la vinculación a la biblioteca y permite que las rutinas de la biblioteca se llamen entre sí sin tener en cuenta su ubicación en el archivo.

Puede usar nm -s o nm --print-armap para enumerar esta tabla de índice. Si a un archivo le falta la tabla, se puede usar otra forma de ar llamada ranlib para agregar solo la tabla.

GNU ar puede crear opcionalmente un archivo delgado, que contiene un índice de símbolos y referencias a las copias originales de los archivos miembros del archivo. Esto es útil para construir bibliotecas para usar dentro de un árbol de construcción local, donde se espera que los objetos reubicables permanezcan disponibles, y copiar el contenido de cada objeto solo desperdiciaría tiempo y espacio.

Un archivo puede ser delgado o puede ser normal. No puede ser ambos al mismo tiempo. Una vez que se crea un archivo, su formato no se puede cambiar sin eliminarlo primero y luego crear un nuevo archivo en su lugar.

Los archivos pequeños también se aplanan, por lo que agregar un archivo pequeño a otro archivo pequeño no los anida, como sucedería con un archivo normal. En cambio, los elementos del primer archivo se agregan individualmente al segundo archivo.

Las rutas a los elementos del archivo se almacenan en relación con el propio archivo.

GNU ar está diseñado para ser compatible con dos instalaciones diferentes. Puede controlar su actividad utilizando opciones de línea de comandos, como las diferentes variedades de ar en los sistemas Unix; o bien, si especifica la opción de línea de comandos única -M, puede controlarla con un script suministrado a través de una entrada estándar, como el programa bibliotecario de MRI.

OPCIONES

GNU ar le permite mezclar el código de operación p y los indicadores modificadores mod en cualquier orden, dentro del primer argumento de la línea de comandos.

Si lo desea, puede comenzar el primer argumento de la línea de comandos con un guión.

La letra clave p especifica qué operación ejecutar; puede ser cualquiera de los siguientes, pero debe especificar solo uno de ellos:

  1. Eliminar módulos del archivo. Especifique los nombres de los módulos que se eliminarán como miembro...; el archivo permanece intacto si no especifica ningún archivo para eliminar. Si especifica el modificador v, ar enumera cada módulo a medida que se elimina.

  2. Utilice esta operación para mover miembros en un archivo. El orden de los miembros en un archivo puede marcar la diferencia en cómo se vinculan los programas usando la biblioteca, si un símbolo está definido en más de un miembro. Si no se usan modificadores con m, cualquier miembro que nombre en los argumentos member se mueve al final del archivo; puedes usar los modificadores a, b o i para moverlos a un lugar específico.

  3. Imprime los miembros especificados del archivo, en el archivo de salida estándar. Si se especifica el modificador v, muestre el nombre del miembro antes de copiar su contenido a la salida estándar. Si no especifica argumentos de miembro, se imprimen todos los archivos del archivo.

  4. Anexo rápido; Históricamente, agrega los archivos member... al final de archive, sin buscar reemplazo. Los modificadores a, b y i no afectan a esta operación; los nuevos miembros siempre se colocan al final del archivo. El modificador v hace que ar enumere cada archivo a medida que se agrega. Dado que el objetivo de esta operación es la velocidad, las implementaciones de ar tienen la opción de no actualizar la tabla de símbolos del archivo, si existe. Sin embargo, demasiados sistemas diferentes asumen que las tablas de símbolos están siempre actualizadas, por lo que GNU ar reconstruirá la tabla incluso con una adición rápida. Nota: GNU ar trata el comando qs como un sinónimo de r: reemplaza los archivos ya existentes en el archivo y agrega otros nuevos al final.

  5. Inserte los archivos miembro... en archivo (con reemplazo). Esta operación se diferencia de q en que los miembros existentes anteriormente se eliminan si sus nombres coinciden con los que se agregan. Si uno de los archivos nombrados en member... no existe, ar muestra un mensaje de error y deja intactos los miembros existentes del archivo que coincidan con ese nombre. De forma predeterminada, los nuevos miembros se agregan al final del archivo; pero puede usar uno de los modificadores a, b o i para solicitar la ubicación relativa a algún miembro existente. El modificador v utilizado con esta operación genera una línea de salida para cada archivo insertado, junto con una de las letras a o r para indicar si el archivo se agregó (no se eliminó ningún miembro anterior) o se reemplazó.

  6. Agregue un índice al archivo o actualícelo si ya existe. Tenga en cuenta que este comando es una excepción a la regla de que solo puede haber una letra de comando, ya que es posible usarlo como comando o como modificador. En cualquier caso hace lo mismo.

  7. Muestra una tabla que enumera los contenidos del archivo, o los de los archivos enumerados en miembro... que están presentes en el archivo. Normalmente, solo se muestra el nombre del miembro, pero si se especifica el modificador O, también se muestra el desplazamiento correspondiente del miembro. Finalmente, para ver los modos (permisos), marca de tiempo, propietario, grupo y tamaño, se debe incluir el modificador v. Si no especifica un miembro, se enumeran todos los archivos del archivo. Si hay más de un archivo con el mismo nombre (por ejemplo, fie) en un archivo (por ejemplo, b.a), ar t b.a fie enumera sólo la primera instancia; para verlos todos, debe solicitar una lista completa; en nuestro ejemplo, ar t b.a.

  8. Extraer miembros (llamados member) del archivo. Puede usar el modificador v con esta operación, para solicitar que ar enumere cada nombre a medida que lo extrae. Si no especifica un miembro, se extraen todos los archivos del archivo. Los archivos no se pueden extraer de un archivo pequeño y existen restricciones para extraer archivos creados con P: las rutas no deben ser absolutas, no pueden contener .. y cualquier Deben existir subdirectorios en las rutas. Si desea evitar estas restricciones, utilice la opción --output para especificar un directorio de salida.

Una serie de modificadores (mod) pueden seguir inmediatamente a la letra clave p para especificar variaciones en el comportamiento de una operación:

  1. Agregue nuevos archivos después de un miembro existente del archivo. Si usa el modificador a, el nombre de un miembro de archivo existente debe estar presente como el argumento relpos, antes de la especificación de archivo.

  2. Agregue nuevos archivos antes de un miembro existente del archivo. Si usa el modificador b, el nombre de un miembro de archivo existente debe estar presente como el argumento relpos, antes de la especificación de archivo. (igual que i).

  3. Crear el archivo. El archivo especificado siempre se crea si no existe, cuando solicita una actualización. Pero se emite una advertencia a menos que especifique de antemano que espera crearla, utilizando este modificador.

  1. Operar en modo determinista. Al agregar archivos y el índice de archivo, use cero para UID, GID, marcas de tiempo y use modos de archivo consistentes para todos los archivos. Cuando se usa esta opción, si ar se usa con opciones idénticas y archivos de entrada idénticos, varias ejecuciones crearán archivos de salida idénticos independientemente de los propietarios, grupos, modos de archivo o tiempos de modificación de los archivos de entrada. Si binutils se configuró con --enable-deterministic-archives, este modo está activado de forma predeterminada. Se puede desactivar con el modificador U, a continuación.

  1. Truncar nombres en el archivo. GNU ar normalmente permitirá nombres de archivo de cualquier longitud. Esto hará que se creen archivos que no son compatibles con el programa nativo ar en algunos sistemas. Si esto es una preocupación, el modificador f se puede usar para truncar los nombres de los archivos al colocarlos en el archivo.

  1. Inserte nuevos archivos antes de un miembro existente del archivo. Si usa el modificador i, el nombre de un miembro de archivo existente debe estar presente como el argumento relpos, antes de la especificación de archivo. (igual que b).

  1. Especifique las dependencias de esta biblioteca. Las dependencias deben seguir inmediatamente a este carácter de opción, deben usar la misma sintaxis que la línea de comando del enlazador y deben especificarse dentro de un único argumento. Es decir, si se necesitan varios elementos, se deben citar para formar un solo argumento de línea de comando. Por ejemplo L -L/usr/local/lib -lmydep1 -lmydep2

  1. Utiliza el parámetro count. Esto se usa si hay varias entradas en el archivo con el mismo nombre. Extraiga o elimine la instancia count del nombre dado del archivo.

  1. Conservar las fechas originales de los miembros al extraerlos. Si no especifica este modificador, los archivos extraídos del archivo se marcan con la hora de extracción.

  1. Muestre los desplazamientos de los miembros dentro del archivo. Úselo junto con la opción t.

  2. Utilice el nombre completo de la ruta al hacer coincidir o almacenar nombres en el archivo. Los archivos creados con nombres de ruta completos no son compatibles con POSIX y, por lo tanto, es posible que no funcionen con otras herramientas que no sean las herramientas GNU actualizadas. La modificación de dichos archivos con GNU ar sin usar P eliminará los nombres completos de las rutas a menos que el archivo sea un archivo delgado. Tenga en cuenta que P puede ser útil al agregar archivos a un archivo reducido, ya que r sin P ignora la ruta al elegir qué elemento reemplazar. Por lo tanto, ar rcST archive.a subdir/file1 subdir/file2 file1 dará como resultado que el primer subdir/file1 sea reemplazado por file1 del directorio actual. Agregar P evitará este reemplazo.

  1. Escriba un índice de archivo de objeto en el archivo o actualice uno existente, incluso si no se realiza ningún otro cambio en el archivo. Puede usar este indicador modificador con cualquier operación o solo. Ejecutar ar s en un archivo es equivalente a ejecutar ranlib en él.

  1. No genere una tabla de símbolos de archivo. Esto puede acelerar la creación de una gran biblioteca en varios pasos. El archivo resultante no se puede utilizar con el enlazador. Para construir una tabla de símbolos, debe omitir el modificador S en la última ejecución de ar, o debe ejecutar ranlib en el archivo .

  2. Alias en desuso para --thin. No se recomienda T porque en muchas implementaciones ar T tiene un significado diferente, según lo especificado por X/Open System Interface.

  1. Normalmente, ar r... inserta todos los archivos enumerados en el archivo comprimido. Si desea insertar solo aquellos de los archivos que enumera que son más nuevos que los miembros existentes con los mismos nombres, use este modificador. El modificador u solo se permite para la operación r (reemplazar). En particular, la combinación qu no está permitida, ya que la verificación de las marcas de tiempo perdería cualquier ventaja de velocidad de la operación q.

  1. No opere en modo determinista. Este es el inverso del modificador D anterior: los archivos agregados y el índice de archivo obtendrán sus valores reales de UID, GID, marca de tiempo y modo de archivo. Este es el valor predeterminado a menos que binutils se haya configurado con --enable-deterministic-archives.

  1. Este modificador solicita la versión detallada de una operación. Muchas operaciones muestran información adicional, como nombres de archivo procesados, cuando se agrega el modificador v.

  1. Este modificador muestra el número de versión de ar.

El programa ar también admite algunas opciones de línea de comandos que no son ni modificadores ni acciones, pero que cambian su comportamiento de formas específicas:

--help

Muestra la lista de opciones de línea de comandos admitidas por ar y luego sale.

--version

Muestra la información de la versión de ar y luego sale.

-X32_64

ar ignora una opción inicial deletreada -X32_64, por compatibilidad con AIX. El comportamiento producido por esta opción es el predeterminado para GNU ar. ar no es compatible con ninguna de las otras opciones de -X; en particular, no es compatible con -X32, que es el predeterminado para AIX ar.

--plugin name

El interruptor de línea de comando opcional --plugin name hace que ar cargue el complemento llamado name que agrega soporte para más formatos de archivo, incluidos archivos de objetos con información de optimización del tiempo de enlace. Esta opción solo está disponible si la cadena de herramientas se ha creado con la compatibilidad con complementos habilitada. Si no se proporciona --plugin, pero se ha habilitado la compatibilidad con complementos, entonces ar itera sobre los archivos en $ {libdir}/bfd-plugins en orden alfabético y se utiliza el primer complemento que reclama el objeto en cuestión. Tenga en cuenta que este directorio de búsqueda de complementos no es el utilizado por la opción -plugin de ld. Para hacer que ar use el complemento del enlazador, debe copiarse en el directorio $ {libdir}/bfd-plugins. Para compilaciones basadas en GCC, el complemento del enlazador se llama liblto_plugin.so.0.0.0. Para compilaciones basadas en Clang, se llama LLVMgold.so. El complemento GCC siempre es compatible con versiones anteriores, por lo que basta con copiar la más reciente.

--target target

El modificador de línea de comando opcional --target bfdname especifica que los miembros del archivo están en un formato de código de objeto diferente del formato predeterminado de su sistema. Ver

--output dirname

La opción --output se puede usar para especificar una ruta a un directorio en el que se deben extraer los miembros del archivo. Si no se especifica esta opción, se utilizará el directorio actual. Nota: aunque la presencia de esta opción implica una operación de extracción de x, esa opción aún debe incluirse en la línea de comando.

--record-libdeps libdeps

La opción --record-libdeps es idéntica al modificador l, solo que se maneja en forma larga.

--thin

Convierta el archivo especificado en un archivo fino. Si ya existe y es un archivo regular, los miembros existentes deben estar presentes en el mismo directorio que archivo.

  1. Leer opciones de línea de comandos desde archivo. Las opciones leídas se insertan en lugar de la opción @archivo original. Si el archivo no existe o no se puede leer, la opción se tratará literalmente y no se eliminará. Las opciones en archivo están separadas por espacios en blanco. Se puede incluir un carácter de espacio en blanco en una opción encerrando la opción completa entre comillas simples o dobles. Se puede incluir cualquier carácter (incluida una barra invertida) prefijando el carácter que se va a incluir con una barra invertida. El archivo puede contener opciones @archivo adicionales; cualquiera de estas opciones se procesará recursivamente.

VER TAMBIÉN

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

DERECHOS DE AUTOR

Copyright (c) 1991-2023 Free Software Foundation, Inc.

Se otorga permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre GNU, Versión 1.3 o cualquier versión posterior publicada por la Free Software Foundation; sin secciones invariantes, sin textos de portada y sin textos de contraportada. Se incluye una copia de la licencia en la sección titulada Licencia de documentación libre de GNU.