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 /.
Para facilitar el uso, guardaremos la sesión de Xshell. Como transferir la información de sesión gua
Linux como un derivado de Unix sistema operativo , Linux se ha incorporado en vista de la actual ps
A partir de hoy, inicié oficialmente el desarrollo de tiny4412. Hoy observé principalmente el proc
Primero, el entorno: vmware workstaion 9.0 centos 6.2 iou-web Segundo, instalación 1. Instalac
Tareas programadas de Linux en cron
Comandos comunes para crear y eliminar directorios de Linux
Tutorial de Buscar y Reemplazar del Editor VIM de Linux
Configurar correctamente el servidor remoto de Windows 2008
Primitiva suplementaria de Linux, interrupción, interrupción suave
Terminal de Linux accesos directos de uso general
Sistema cronometrado de tareas de Linux entrada Cron
Explicación detallada de los parámetros del comando RPM en Linux
Cómo elegir un entorno de escritorio Linux
Instale dos métodos de sistema operativo Linux en un disco duro
Linux de gama alta: el software de recuperación de datos del sistema de archivos ReiserFS
Cómo modificar la ubicación de inicio predeterminada de win7 Explorer
¿Qué es el sistema operativo Windows 7?
Método para permitir que varios usuarios inicien sesión en Windows 2008 Remote Desktop (gráfico)
Le enseñará a establecer la contraseña de la carpeta compartida WinXP
Cómo prevenir win10 cuando el sistema se actualiza automáticamente
¿Qué debo hacer si Windows 8.1 no puede instalar el parche KB2942844?
Win7 sistema de formato de video Ifox cómo convertir formato MP4