El archivador , también conocido simplemente como ar , es una utilidad de Unix que mantiene grupos de archivos como un solo archivo . Hoy en día, ar
generalmente se usa solo para crear y actualizar archivos de bibliotecas estáticas que el editor de enlaces o enlazador usa y para generar paquetes .deb para la familia Debian ; se puede usar para crear archivos con cualquier propósito, pero ha sido reemplazado en gran medida por tar
para fines distintos a las bibliotecas estáticas. [3] Se ar
incluye una implementación de como una de las GNU Binutils . [2]
Autor (es) original (es) | Ken Thompson , Dennis Ritchie ( Laboratorios Bell de AT&T ) |
---|---|
Desarrollador (es) | Varios desarrolladores comerciales y de código abierto |
Versión inicial | 3 de noviembre de 1971 |
Sistema operativo | Unix , similar a Unix , V , Plan 9 , Inferno |
Plataforma | Multiplataforma |
Tipo | Mando |
Extensión de nombre de archivo | |
---|---|
Tipo de medio de Internet | aplicación / x-archive [1] |
número mágico | ! |
Tipo de formato | formato de archivo |
Contenedor para | generalmente archivos objeto ( .o , .obj ) |
Estándar | No estandarizado, existen varias variantes |
¿ Formato abierto ? | Sí [2] |
En Linux Standard Base (LSB), ar
ha quedado obsoleto y se espera que desaparezca en una versión futura de ese estándar. El razonamiento proporcionado fue que "el LSB no incluye utilidades de desarrollo de software ni especifica formatos de archivo .o y .a". [4]
Detalles del formato de archivo
![](http://wikiimg.tojsiabtv.com/wikipedia/commons/thumb/6/67/Deb_File_Structure.svg/220px-Deb_File_Structure.svg.png)
El formato ar nunca ha sido estandarizado; Los archivos modernos se basan en un formato común con dos variantes principales, BSD y System V (inicialmente conocido como COFF , y también utilizado por GNU , ELF y Windows ).
Históricamente ha habido otras variantes [5], incluidas V6 , V7 , AIX (pequeñas y grandes) y Coherent, que varían significativamente del formato común. [6]
Los archivos ". Deb " de Debian utilizan el formato común.
Un archivo ar comienza con un encabezado global , seguido de un encabezado y una sección de datos para cada archivo almacenado dentro del archivo ar.
Cada sección de datos está alineada en 2 bytes. Si termina en un desplazamiento impar, se usa una nueva línea ('\ n', 0x0A) como relleno.
Firma de archivo
La firma del archivo es un campo único que contiene la cadena ASCII mágica "!
seguida de un único carácter de control LF (0x0A).
Encabezado de archivo
Cada archivo almacenado en un archivo ar incluye un encabezado de archivo para almacenar información sobre el archivo. El formato común es el siguiente. Los valores numéricos se codifican en ASCII y todos los valores se rellenan a la derecha con espacios ASCII (0x20).
Compensar | Largo | Nombre | Formato |
---|---|---|---|
0 | dieciséis | Identificador de archivo | ASCII |
dieciséis | 12 | Marca de tiempo de modificación de archivo | Decimal |
28 | 6 | ID de propietario | Decimal |
34 | 6 | Identificación del grupo | Decimal |
40 | 8 | Modo de archivo (tipo y permiso) | Octal |
48 | 10 | Tamaño del archivo en bytes | Decimal |
58 | 2 | Personajes finales | 0x60 0x0A |
Como los encabezados solo incluyen caracteres ASCII imprimibles y avances de línea, un archivo que contiene solo archivos de texto, por lo tanto, todavía parece ser un archivo de texto en sí mismo.
Los miembros están alineados con límites de bytes pares. "Cada miembro del archivo de almacenamiento comienza en un límite de bytes par; se inserta una nueva línea entre los archivos si es necesario. Sin embargo, el tamaño dado refleja el tamaño real del archivo sin incluir el relleno". [7]
Debido a las limitaciones de la longitud y el formato del nombre de archivo, las variantes GNU y BSD idearon diferentes métodos para almacenar nombres de archivo largos. Aunque el formato común no sufre el problema del año 2038 , muchas implementaciones de la utilidad ar sí lo hacen y es posible que deban modificarse en el futuro para manejar correctamente las marcas de tiempo en exceso de 2147483647. Una descripción de estas extensiones se encuentra en libbfd. [8]
Dependiendo del formato, muchas implementaciones de ar incluyen una tabla de símbolos global (también conocida como armap, directorio o índice) para un enlace rápido sin necesidad de escanear todo el archivo en busca de un símbolo. POSIX reconoce esta característica y requiere que las implementaciones de ar tengan una -s
opción para actualizarla. La mayoría de las implementaciones lo colocan en la primera entrada del archivo. [9]
Variante BSD
BSD ar almacena los nombres de archivo rellenados a la derecha con espacios ASCII. Esto causa problemas con los espacios dentro de los nombres de archivo. 4.4BSD ar almacena nombres de archivo extendidos colocando la cadena "# 1 /" seguida de la longitud del nombre de archivo en el campo de nombre de archivo, y almacenando el nombre de archivo real delante de la sección de datos. [6]
La utilidad BSD ar tradicionalmente no maneja la construcción de una tabla de búsqueda de símbolos globales, y delega esta tarea a una utilidad separada llamada ranlib , [10] que inserta un archivo específico de la arquitectura llamado __.SYMDEF
como primer miembro del archivo. [11] Algunos descendientes ponen un espacio y "CLASIFICADO" después del nombre para indicar una versión ordenada. [12] Existe una variante de 64 bits llamada __.SYMDEF_64
en Darwin .
-s
Sin embargo, dado que POSIX agregó el requisito de la opción como reemplazo de ranlib, las implementaciones de BSD ar más recientes se han reescrito para tener esta característica. FreeBSD, en particular, abandonó el formato de tabla SYMDEF y adoptó la tabla de estilo System V. [13]
Variante del sistema V (o GNU)
System V ar usa un carácter '/' (0x2F) para marcar el final del nombre del archivo; esto permite el uso de espacios sin el uso de un nombre de archivo extendido. Luego, almacena múltiples nombres de archivo extendidos en la sección de datos de un archivo con el nombre "//", este registro es referido por encabezados futuros. Un encabezado hace referencia a un nombre de archivo extendido almacenando un "/" seguido de un desplazamiento decimal al comienzo del nombre de archivo en la sección de datos del nombre de archivo extendido. El formato de este archivo "//" en sí mismo es simplemente una lista de los nombres de archivo largos, cada uno separado por uno o más caracteres LF. Tenga en cuenta que las compensaciones decimales son el número de caracteres, no el número de línea o cadena dentro del archivo "//". Esta suele ser la segunda entrada del archivo, después de la tabla de símbolos, que siempre es la primera.
System V ar utiliza el nombre de archivo especial "/" para indicar que la siguiente entrada de datos contiene una tabla de búsqueda de símbolos, que se utiliza en las bibliotecas de ar para acelerar el acceso. Esta tabla de símbolos está construida en tres partes que se registran juntas como datos contiguos.
- Un entero big endian de 32 bits, que indica el número de entradas de la tabla.
- Un conjunto de enteros big endian de 32 bits. Uno para cada símbolo, registrando la posición dentro del archivo del encabezado del archivo que contiene este símbolo.
- Un conjunto de cadenas terminadas en cero. Cada uno es un nombre de símbolo y aparece en el mismo orden que la lista de posiciones en la parte 2.
Algunos sistemas System V no utilizan el formato descrito anteriormente para la tabla de búsqueda de símbolos. Para sistemas operativos como HP-UX 11.0, esta información se almacena en una estructura de datos basada en el formato de archivo SOM .
El archivo especial "/" no termina con una secuencia específica; el final se asume una vez que se ha leído el nombre del último símbolo.
Para superar el límite de tamaño de archivo de 4 GiB, algunos sistemas operativos como Solaris 11.2 y GNU utilizan una tabla de búsqueda de variantes. En lugar de enteros de 32 bits, se utilizan enteros de 64 bits en las tablas de búsqueda de símbolos. La cadena "/ SYM64 /" en lugar de "/" se utiliza como identificador para esta tabla [14]
Variante de Windows
La variante de Windows (PE / COFF) se basa en la variante SysV / GNU. La primera entrada "/" tiene el mismo diseño que la tabla de símbolos SysV / GNU. La segunda entrada es otra "/", una extensión ECOFF de Microsoft que almacena una tabla extendida de referencias cruzadas de símbolos. Este está ordenado y usa números enteros little-endian. [5] [15] La tercera entrada son los datos de nombres largos "//" opcionales como en SysV / GNU. [dieciséis]
Archivo delgado
La versión de ar
en GNU binutils y elfutils tiene un formato adicional "archivo fina" con el número mágico !
Uso de ejemplo
Para crear un archivo a partir de archivos class1.o , class2.o , class3.o , se usaría el siguiente comando:
ar rcs libclass.a class1.o class2.o class3.o
Los enlazadores de Unix, generalmente invocados a través del compilador de Ccc
, pueden leer ar
archivos y extraer archivos de objetos de ellos, por lo que si libclass.a
es un archivo que contiene class1.o
, class2.o
y class3.o
, a continuación,
cc main.c libclass.a
o (si libclass.a se coloca en la ruta de la biblioteca estándar, como / usr / local / lib )
cc main.c -lclass
o (durante la vinculación)
ld ... main.o -lclass ...
es lo mismo que:
cc main.c class1.o class2.o class3.o
Ver también
- .debutante
- Formatos de archivo
- Lista de comandos de Unix
Referencias
- ^ a b "aplicación / x-archive" . Consultado el 11 de marzo de 2019 .
- ^ a b "ar (1) - Página de manual de Linux" . Consultado el 3 de octubre de 2013 .
- ^ "Bibliotecas estáticas" . TLDP . Consultado el 3 de octubre de 2013 .
- ^ Especificación del núcleo básico estándar de Linux, versión 4.1, capítulo 15. Comandos y utilidades> ar
- ^ a b Levine, John R. (2000) [octubre de 1999]. "Capítulo 6: Bibliotecas" . Enlazadores y cargadores . La Serie Morgan Kaufmann en Ingeniería de Software y Programación (1 ed.). San Francisco, Estados Unidos: Morgan Kaufmann . ISBN 1-55860-496-0. OCLC 42413382 . Archivado desde el original el 5 de diciembre de 2012 . Consultado el 12 de enero de 2020 .Código: [1] [2] Errata: [3]
- ^ a b Página del manual para el formato de archivo NET / 2 ar
- ^ "ar.h" . www.unix.com . Los foros de UNIX y Linux.
- ^ "bminor / binutils-gdb: archive.c" . GitHub .
- ^ - Referencia de comandos y utilidades, la especificación única de UNIX , número 7 de The Open Group
- ^ Página del manual para la utilidad NET / 2 ranlib
- ^ Página del manual para el formato de archivo ranlib NET / 2
- ^ "ranlib.h" . opensource.apple.com .
- ^ - Manual de formatos de archivo FreeBSD
- ^ "ar.h (3HEAD)" . docs.oracle.com . Oracle Corporation. 11 de noviembre de 2014 . Consultado el 14 de noviembre de 2018 .
- ^ Pietrek, Matt (abril de 1998), "Under The Hood" , Microsoft Systems Journal , archivado desde el original el 24 de junio de 2007 , consultado el 23 de agosto de 2014
- ^ "llvm-mirror / llvm: archive.cpp (detección de formato)" . GitHub . Consultado el 10 de febrero de 2020 .
- ^ "ar" . Utilidades binarias GNU .
enlaces externos
- : crear y mantener archivos de biblioteca: referencia de comandos y utilidades, la especificación única de UNIX , número 7 de The Open Group
- - Manual del programador de Plan 9 , Volumen 1
- - Manual de comandos generales de Inferno
- - Manual de comandos de usuario de Linux
- - Manual de comandos generales de FreeBSD
- - Versión 7 del manual del programador de Unix
- - Manual de formatos de archivo FreeBSD - una cuenta de formatos Unix
- Documento de arquitectura en tiempo de ejecución PA-RISC de 32 bits, HP-UX 11.0 versión 1.0, Hewlett-Packard, 1997.
Consulte el Capítulo 4: Bibliotecas reubicables . Disponible en [4] (devresource.hp.com)