Qué son.a and.so ¿archivos?


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

Author: Peter Mortensen, 2012-03-21

5 answers

Bibliotecas de archivos (.a) están enlazados estáticamente, es decir, cuando compila su programa con la opción-c en gcc. Por lo tanto, si hay algún cambio en la biblioteca, necesita compilar y construir su código de nuevo.

La ventaja de. so (shared object) over.una biblioteca es que están vinculados durante el tiempo de ejecución, es decir, después de la creación de su .o opción archivo-o en gcc. Por lo tanto, si hay algún cambio en el archivo .so, no es necesario recompilar su programa principal. Pero asegúrese de que su programa principal está vinculado a la nuevo archivo. so con el comando ln.

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

Espero que esto ayude.

 373
Author: Leafy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-21 18:09:55

.a son bibliotecas estáticas. Si utiliza 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.

. también lo son las bibliotecas dinámicas. Si utiliza código almacenado dentro de ellos, no se toma e incrustado en su propio binario. En su lugar, solo se hace referencia, por lo que el binario dependerá de ellos y el código del archivo so se agrega/carga en tiempo de ejecución. En Visual Studio / Windows estos serían .archivos dll (con pequeños .archivos lib que contiene información de enlace).

 156
Author: Mario,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-21 16:55:29

.los archivos a son normalmente bibliotecas que se enlazan estáticamente (o más exactamente archivos), y
.también lo son las bibliotecas enlazadas dinámicamente.

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

 10
Author: gbulmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-21 16:55:49

Se utilizan en la etapa de enlace. .a los archivos están enlazados estáticamente, y .so los archivos están enlazados, por lo que la biblioteca es necesaria cada vez que se ejecuta el exe.

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

 7
Author: Matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-21 16:59:19

Wikipedia es una fuente decente para esta información.

Para aprender acerca de los archivos estáticos de la biblioteca como .a read Static libarary

Para aprender sobre archivos de bibliotecas compartidas como .así que lee Library_(computing)#Shared_libraries En esta página, también hay información útil en la sección File naming.

 1
Author: user3731622,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-28 19:00:20