¿Qué son los archivos .ay .so?

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.

Frondoso
fuente
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).

Mario
fuente
Hola, ¿hay alguna opción para descompilar el archivo .so en código c / c ++?
Jishant
@Ancee: mira esta pregunta: stackoverflow.com/questions/205059/is-there-ac-decompiler
Paul Wintz
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.

gbulmer
fuente
¿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.

Mate
fuente
0

Wikipedia es una fuente decente para esta información.

Para obtener información sobre archivos de biblioteca estáticos como .a, lea la biblioteca estática

Para obtener información sobre archivos de biblioteca compartidos como .so lea Library_ (informática) #Shared_libraries En esta página, también hay información útil en la sección de nombres de archivos .

usuario3731622
fuente