Si logró explorar el ecosistema de desarrollo de software, es muy consciente del impacto que tienen las bibliotecas en el sistema. Podemos definir una biblioteca como un conjunto de recursos no volátiles o un conjunto de bloques de código precompilados que se pueden reutilizar para ejecutar un programa. Por lo tanto, el programa consultará a la biblioteca los recursos que necesita para continuar o completar su ejecución.
Las bibliotecas pueden ser de 32 bits o de 64 bits, según la arquitectura del sistema Linux disponible. Un sistema Linux de 64 bits puede alojar bibliotecas de 32 y 64 bits, mientras que un sistema Linux de 32 bits solo puede alojar bibliotecas de 32 bits.
Con este fin, este artículo se centrará en los usuarios de sistemas Linux de 64 bits. También debemos tener en cuenta que las bibliotecas discutidas en este artículo son bibliotecas C/C++ porque tienen una fuerte conexión con el sistema operativo Linux.
Este artículo ayudará a los usuarios de Linux de 64 bits a determinar si están usando bibliotecas de 32 bits o de 64 bits en sus sistemas Linux.
Tabla de Contenidos
tipo de biblioteca
Diferentes programas se benefician de una sola biblioteca porque una biblioteca es solo un archivo que contiene una colección agrupada de código precompilado, lo que es beneficioso para varios programas y se puede consultar fácilmente.
En el entorno del sistema operativo Linux, hay dos tipos de bibliotecas:
- biblioteca estática: Estas bibliotecas tienen la extensión de archivo
“.a”
y (en tiempo de compilación) vinculado estáticamente al programa. - biblioteca compartida: Estas bibliotecas tienen la extensión de archivo
“.so”
Se activan al inicio del programa y se cargan en la memoria en tiempo de ejecución.
Las bibliotecas estáticas no existen como ejecutables, sino como archivos de otros archivos. Las bibliotecas compartidas, por otro lado, son ejecutables. P.ej, Duende Los archivos de objetos se pueden clasificar como bibliotecas estáticas, mientras que Duende Un archivo puede considerarse como una biblioteca compartida.
Ahora veamos cómo determinar si una biblioteca es de 64 bits, el sistema Linux es de 32 bits o de 64 bits.
Uso de comandos de archivo de Linux
De acuerdo con su página man, documento Los comandos son eficaces para determinar los tipos de archivos. Esta propiedad lo hace ideal para determinar el formato de la biblioteca que se está utilizando.
Vamos a formatear algunas de las bibliotecas internas /usr/lib Tabla de contenido.
$ ls -l /usr/lib
Para determinar si la biblioteca es de 64 bits o de 32 bits, ejecute:
$ file /usr/lib/klibc-K8e6DOmVI9JpyGMLR7qNe5iZeBk.so
La captura de pantalla anterior confirma que la biblioteca compartida resaltada es 64 bits.
También podemos verificar el formato de las bibliotecas estáticas mediante:
$ file /usr/lib/x86_64-linux-gnu/libffi.a
Cuando se trata de bibliotecas estáticas, documento El comando solo lo informa como un archivo y no informa si se trata de una biblioteca de 64 bits o de 32 bits, porque no es un archivo ELF.
Usando el comando objdump de Linux
Este volcado de objetos El comando hace referencia al archivo de objeto y vuelca información sobre él en la salida estándar.Debe usarse con -f
Las banderas muestran información del encabezado del archivo.
Usémoslo para verificar el formato de biblioteca de una biblioteca compartida:
$ objdump -f /usr/lib/klibc-K8e6DOmVI9JpyGMLR7qNe5iZeBk.so
sección de salida»formato de archivo elf64» significa que estamos usando una biblioteca de 64 bits.
Ahora usemos volcado de objetos Comando para verificar el formato de biblioteca de una biblioteca estática:
$ objdump -f /usr/lib/x86_64-linux-gnu/libffi.a
Este volcado de objetos El comando itera sobre todos los objetos en la biblioteca estática proporcionada, resaltando sus formatos de archivo asociados.
Para una salida simple, podemos canalizar volcado de objetos comandar un awk Comando de la siguiente manera:
$ objdump -f /usr/lib/x86_64-linux-gnu/libffi.a | awk 'sub(/.*file format /,"") && !a[$0]++' elf64-x86-64
Ahora podemos determinar fácilmente el formato de biblioteca utilizado para bibliotecas estáticas y compartidas en el entorno del sistema operativo Linux.