Linux cmake sistema genere dinámico y estático de la biblioteca.

El concepto de la biblioteca

  Escribir un programa ciertamente no puede hacerlo sin llamar a la biblioteca. En un artículo sobre el cmake, la función principal llama a la función y func1.c func2.c dos archivos de origen. Obviamente func1.c y func2.c es una biblioteca de programas. Sin embargo, el sistema operativo está generalmente acondicionada archivos de objetos llamados bibliotecas. Eso es empaquetar func1.c y func2.c sus ficheros de cabecera en su conjunto, es la biblioteca.
  Biblioteca se divide en dos tipos de bibliotecas estáticas y dinámicas, el sistema Linux es una biblioteca estática sufijo .a, el sufijo librería dinámica es .so. En los sistemas Windows sufijo biblioteca estática a .lib, sufijo librería dinámica para el .dll.
  La librería dinámica biblioteca estática contenido en sí es el mismo (archivos de destino son a llamarse), sus mentiras diferencia en la manera en que agregaron al programa .

biblioteca estática

  se añade biblioteca estática al código fuente se compila y vinculado en la etapa del procedimiento , sin necesidad de llamar a la fase operativa del programa . Hablando en sentido figurado, biblioteca estática compilado y enlazado en fase con el código fuente de "combinado" para formar un todo. Cuando el programa se pone en marcha, ya que el archivo ejecutable ya contiene una base de datos, por lo que ejecutar el código no tiene nada que ver con las bibliotecas estáticas originales (la biblioteca estática original, elimina toda la derecha).
  Ejecutables nada que ver con la biblioteca estática original es una cosa buena, pero para lograr este propósito, toda la biblioteca de contenido que se añade al programa, lo que aumentará la carga sobre el equipo de almacenamiento y la memoria. Suponiendo un tamaño de biblioteca estática es de 2 MB, una racha de 100 programa que contiene las bibliotecas estáticas del sistema operativo, al parecer debido a las llamadas a la biblioteca, la memoria para este pasó un total de 200 MB de espacio.
  características visibles biblioteca estática es:
  1. biblioteca estática implementa el enlace y el código fuente en la fase de compilación-enlace.
  2. El programa ejecutable en sí no está asociada con las librerías necesarias, el trasplante más conveniente, sin necesidad de considerar si se dispone de una biblioteca en portar dicha plataforma.
  3. memoria y almacenamiento desperdicio de recursos relativos. Si necesita actualizar la biblioteca estática, es necesario volver a compilar el código fuente de generación. Si la aplicación utiliza la vinculación biblioteca estática, las necesidades de los programas para descargar e instalar el programa completo se actualiza, demasiados problemas.

librería dinámica

  se añade biblioteca dinámica al código fuente durante la fase operativa del programa , sólo se generará una pequeña mesa de compilar y enlazar las fases del procedimiento para el registro de la dirección de las llamadas a las bibliotecas dinámicas . En sentido figurado, el código ejecutable y las bibliotecas dinámicas cada uno es diferente y separado. Sólo después de que el programa se pone en marcha, el programa buscará las bibliotecas dinámicas, y el trabajo en conjunto.
  Desde el principio de funcionamiento de las bibliotecas dinámicas, bibliotecas dinámicas y pertinencia del programa de fuerte. Cuando se ejecuta el programa debe tener un inventario dinámico. Si el entorno operativo no contiene una biblioteca dinámica, no se ejecutará el programa. Al mismo tiempo, esto trae los beneficios de una biblioteca dinámica implementa la distribución de los recursos entre los programas (a veces también se conoce como una biblioteca biblioteca dinámica compartida). Supongamos que un tamaño de la biblioteca dinámica es de 2 MB, un sistema operativo que se ejecuta en el programa 100 que contiene las bibliotecas dinámicas, al parecer debido a las librerías dinámicas compartida, sólo tengan que hacer una memoria de 2 MB para almacenar una copia de la DLL en él (con el fuerte contraste por encima de alguna manera).
  características visibles de una biblioteca dinámica es el siguiente:
  1. La biblioteca de enlace dinámico al código fuente de la fase operativa del programa.
  2. El ejecutable biblioteca propio programa asociado con el fuerte, el trasplante se desea que sean más problemas, es necesario considerar si la plataforma de trasplante con esta biblioteca.
  3. memoria y almacenamiento de ahorro de recursos relativos. Si es necesario actualizar la biblioteca dinámica directamente con la nueva librería dinámica para reemplazar el original en la línea, no hay otras operaciones. aplicación de actualización incremental se basa en este principio.
  PD: software agrietados o modificar el software en la plataforma Windows a menudo no se utilice el nuevo archivo DLL para reemplazar el archivo DLL original, ¿verdad? De hecho, esta es la biblioteca dinámica actualizada, al parecer, sin modificar el resto del programa.

cmake generar biblioteca dinámica biblioteca estática

  Crear una nueva carpeta, organizada como se muestra a continuación:
Aquí Insertar imagen Descripción

  carpeta de compilación: para almacenar archivos intermedios generados por el compilador.
  carpeta de la liberación: lugar generan biblioteca estática, librería dinámica.
  lib_func carpeta: archivos originales de la biblioteca de generación de código de la biblioteca se almacenan. Para mayor comodidad, el último artículo en el interior de código simple cmake.
  código func1.c a continuación, proporciona una función de impresión digital:

#include "func1.h"
#include <stdio.h>

void DataShow(int data)
{
    printf("the input data is:%d \n",data);//打印一个数字
}


  func1.h código es el siguiente:

#ifndef  _FUNC1_H_
#define _FUNC1_H_
extern void DataShow(int data);
#endif 

  código func2.c continuación, se proporciona una función de números juntos:

#include <stdio.h>
#include "func2.h"

void DataAdd(int a,int b)//打印两个数字之和
{
    int c = a+b;
    printf("the number is:%d\n",c);
}

  func2.h código es el siguiente:

#ifndef _FUNC2_H_
#define _FUNC2_H_
extern void DataAdd(int a,int b);

#endif // !_FUNC2_H_


  Hay dos proyectos CMakeLists.txt. En el directorio raíz de los contenidos del proyecto son:


cmake_minimum_required (VERSION 2.8)#cmake最低版本为2.8

project (demo)#工程名为demo

add_subdirectory (lib_func)#将lib_func这个文件夹设为子目录


  Las dos primeras frases de contenido fácil de entender. La tercera frase add_subdirectory (lib_func)significa la lib_funccarpeta como un subdirectorio. subdirectorio conjunto producirá el efecto? Después de que el efecto es el de ejecutar la tercera frase, cmake pasará automáticamente a lib_funcla carpeta en busca CMakeLists.txt, y luego realizar la CMakeLists.txt.
  En otras palabras, este proyecto es la primera aplicación de la CMakeLists.txt proyecto bajo el directorio raíz, a continuación, ejecutar subdirectorios CMakeLists.txt (lib_func). relación CMakeLists.txt entre los dos es la ejecución de la orden.
  contenido CMakeLists.txt lib_func son como sigue:

aux_source_directory(. SRC_LIST)#将此目录的源文件集合称为变量SRC_LIST
add_library(funcLib_shared SHARED ${SRC_LIST})#库的名称,库的类型,库的源文件(动态库)
add_library(funcLib_static STATIC ${SRC_LIST})#库的名称,库的类型,库的源文件(静态库)

set_target_properties(funcLib_shared PROPERTIES OUTPUT_NAME "funcLib")#库的名称,库的输出名称(动态库)
set_target_properties(funcLib_static PROPERTIES OUTPUT_NAME "funcLib")#库的名称,库的输出名称(静态库)

set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)#库的输出路径为工程根目录下的lib文件夹。

  Las notas pueden ser obtenidos a partir de los dos finales con el mismo nombre generará estática y la biblioteca dinámica.
  Introduzca la carpeta de compilación, puertos abiertos. La forma más antigua, introduzca primero cmake .., volver a entrar make.
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
  Y, finalmente, a la vista de la carpeta lib, se ha generado una librería dinámica y una biblioteca estática.
Aquí Insertar imagen Descripción

Publicado 54 artículos originales · alabanza ganado 18 · vistas 9554

Supongo que te gusta

Origin blog.csdn.net/m0_37872216/article/details/103959546
Recomendado
Clasificación