¿Qué son los archivos .ay .so?


428

Actualmente estoy tratando de portar una aplicación C a AIX y me estoy confundiendo. ¿Qué son los archivos .ay .so y cómo se utilizan al crear / ejecutar una aplicación?


116
uno es el aarchivo de la biblioteca y el otro es sobjeto ooculto
Shiplu Mokaddim

Respuestas:


484

Las bibliotecas de archivo (.a) están vinculadas estáticamente, es decir, cuando compila su programa con la opción -c en gcc. Entonces, si hay algún cambio en la biblioteca, necesita compilar y construir su código nuevamente.

La ventaja de .so (objeto compartido) sobre .a biblioteca es que están vinculados durante el tiempo de ejecución, es decir, después de la creación de su archivo .o opción -o en gcc. Entonces, si hay algún cambio en el archivo .so, no necesita recompilar su programa principal. Pero asegúrese de que su programa principal esté vinculado al nuevo archivo .so con el comando ln.

Esto te ayudará a construir los archivos .so. http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

Espero que esto ayude.


2
¿alguno de estos se relaciona con pic(código de posición independiente)?
Transang

213

.a son bibliotecas estáticas. Si usa el código almacenado dentro de ellos, se toma de ellos y se incrusta en su propio binario. En Visual Studio, estos serían archivos .lib.

.so son bibliotecas dinámicas. Si usa código almacenado dentro de ellos, no se toma e incrusta en su propio binario. En cambio, solo se hace referencia, por lo que el binario dependerá de ellos y el código del archivo se agregará / cargará en tiempo de ejecución. En Visual Studio / Windows, estos serían archivos .dll (con pequeños archivos .lib que contienen información de enlace).


Hola, ¿hay alguna opción para descompilar el archivo .so en código c / c ++?
Jishant


Un .libarchivo pequeño para .dllse llama biblioteca de importación.
Programador orientado al dinero

13

Los archivos .a suelen ser bibliotecas que se vinculan estáticamente (o archivos más precisos), y
.so son bibliotecas vinculadas dinámicamente.

Para hacer un puerto necesitará el código fuente que se compiló para hacerlos, o archivos equivalentes en su máquina AIX.


¿Cómo construyo mi aplicación para usar archivos .so?
Dunc

Hay muchas referencias excelentes para construir ambos tipos de bibliotecas y vincularlas en la web. Google es tu amigo.
David Pointer

@Dunc: hay un par de formas. ¿Tienes un makefile? Por lo general, el comando que ensambla todo el programa (y por lo tanto llama al vinculador) especificará los lugares para buscar archivos de biblioteca con -L / dir / dir1 /.../ y también puede nombrar bibliotecas explícitamente con -lname. Encontrará que el nombre real es libname.a o libname.so. El enlazador puede entonces averiguar qué hacer si este es un programa razonablemente normal. Pero aún tiene el problema de crear o encontrar el archivo .so. ¿Tiene código fuente para construirlo o una biblioteca AIX?
Gbulmer

10

Se utilizan en la etapa de vinculación. .alos archivos están vinculados estáticamente y los .soarchivos están vinculados, de modo que la biblioteca es necesaria siempre que ejecute el exe.

Puede encontrar dónde están almacenados mirando cualquiera de los directorios lib ... /usr/liby /libtener la mayoría de ellos, y también existe la LIBRARY_PATHvariable de entorno.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.