Linux. A /.so /.la diferencia de biblioteca de destino

  

Al compilar en la plataforma Linux, a menudo se encuentra el problema de la biblioteca de destino, hay bibliotecas estáticas y bibliotecas dinámicas, un solo entendimiento no es demasiado difícil, pero para complejos En lo que respecta a la ingeniería, una vez que se mezclen, la comprensión y el llamado de todo el proyecto causarán grandes problemas. Este documento resume las diferencias entre estos archivos de resultados de compilación comunes.

1. Descripción del formato

En la compilación de linux, a menudo se encuentran sufijos como: .o .a .a .ko, etc., aunque linux no usa la extensión como archivo de identificación La única base para el formato, pero la convención de especificación sigue ahí, como sigue: ◾.o es el archivo objeto objetivo, equivalente al archivo .obj en Windows a.a es una biblioteca estática, que puede ser una o más .o juntas La biblioteca compartida generada por lib.la para conexiones estáticas es en realidad un documento de configuración. Puede ver el archivo * .la con $ file * .la o usar vi para verlo. ◾.so es una biblioteca compartida, similar al archivo dll de la plataforma de Windows

Adicional: También hay una extensión de archivo .ko, pero es un sufijo de archivo de enlace dinámico usado por el kernel de Linux, que pertenece al archivo de módulo, usado en El módulo del kernel se carga cuando se inicia el sistema Linux.

Segundo, cree una instancia

1, cree un archivo de objeto .o

$ gcc -c test.c

Genere test.o, omita el enlace Objeto, por lo que no es un archivo ejecutable.

2, crea un archivo de biblioteca estática

$ ar -r libtest.a test1.o test2.o

3, crea una biblioteca dinámica.so

$ gcc -Wall -fpic -shared test1.c test2.c -o libtest.so

Ejecución de la oración anterior, compile test1.c y test2.c para generar el archivo de biblioteca dinámica libtest.so

4, archivo de biblioteca de enlaces

$ gcc -Wall -fpic -shared -Ltest test3.c -o libtest.so

Compile test3.c y vincule con el libtest.a estático (El valor predeterminado es encontrar el archivo en /usr /lib) para generar la biblioteca dinámica libtest.so.

5, generar la biblioteca .la

.la biblioteca generalmente se realiza a través del archivo make, por supuesto, también puede ser a través de la línea de comandos, comando de referencia:

$ libtool --mode = link Gcc -o libmylib.la -rpath /usr /lib – L /usr /lib – la

libtool buscará el archivo libmylib.a y lo pasará a libmylib.la. Más ayuda de libtool es la siguiente: Tst @ Tst-PC /cygdrive /d /$ libtool --helpUsage: libtool [OPTION] ... [MODE-ARG] ...

Proporcionar servicios de soporte de biblioteca generalizados .

--config mostrar todas las variables de configuración - depurar habilitar el rastreo detallado de shell-n, - ejecutar comandos en pantalla sin modificar ningún archivo - las características muestran información de configuración básica y salir - modo = uso MODE Modo de operación MODO - preserve-dup-deps no elimina las bibliotecas de dependencias duplicadas - silencioso, --silent no imprime mensajes informativos - silencioso, --no-silentprint mensajes informativos (predeterminado) - etiqueta = La etiqueta TAG usa las variables de configuración de la etiqueta TAG-v, imprimiendo más mensajes informativos que predeterminados. No-verbose no imprime los mensajes informativos adicionales - versión versión impresa information-h, --help, --help-all Imprima un mensaje de ayuda corto, largo o detallado

El MODO debe ser uno de los siguientes:

limpiar eliminar archivos del compilación del directorio de compilación compilar un archivo fuente en un objeto libtool execute au Configure tomáticamente la ruta de la biblioteca, luego ejecute un programa y complete la instalación de las bibliotecas libtool instale las bibliotecas instaladas o los archivos ejecutables cree una biblioteca o ejecute una desinstalación desinstale las bibliotecas de un directorio instalado

El MODO-ARGS varía según el MODO. Cuando se pasa primero Opción, `--mode = MODE 'se puede abreviar como` MODE' o una abreviatura única de that.Trate de `libtool --help --mode = MODE 'para obtener una descripción más detallada de MODE.

Cuando Para informar un error, describa un caso de prueba para reproducirlo e incluya la siguiente información:

host-triplet: i686-pc-cygwinshell: /bin /shcompiler: gcccompiler flags: -g -O2 -pipelinker: /usr /i686-pc-cygwin/bin/ld.exe (gnu? yes) libtool: (GNU libtool) 2.4automake: automake (GNU automake) 1.11.1autoconf: autoconf (GNU Autoconf) 2.68

Reportar errores a < [email protected]> .GNU página de inicio de libtool: < http: //www.gnu.org/software/libtool/> .General help utilizando el software GNU: http://www.gnu.org /gethelp /.

Copyright © Conocimiento de Windows All Rights Reserved