2010-04-10 17 views
18

Tengo un montón de proyectos que todos podrían compartir una biblioteca de clases estática "común".biblioteca estática, pero aún necesito encabezados?

Lo que me confunde es si hago una biblioteca estática de estas clases y la enlazo en mis proyectos que todavía necesito los encabezados de las clases en la biblioteca estática en mis proyectos principales.

¿Cuál es el beneficio de la biblioteca estática entonces?

¿Cómo lidian las empresas como Adobe con esto?

Respuesta

32

bibliotecas estáticas le permiten crear una biblioteca y utiliza esa biblioteca en muchos proyectos.

La necesidad de archivos de cabecera:

Dado que el proyecto usando la biblioteca está programado y compilado independiente de la biblioteca, que el programa necesita conocer la declaración de las cosas que está utilizando. De lo contrario, ¿cómo sabe su compilador que está escribiendo un código válido?

Un compilador sólo toma código fuente como entrada y produce una salida. No trata con archivos de objetos compilados o bibliotecas estáticas en la entrada.

La necesidad de vincular en la biblioteca:

Así que tener los encabezados que permite escribir código válido en su proyecto, pero cuando se trata de vincular el tiempo que necesitará para proporcionar la definición que figura dentro de la biblioteca estática.

El enlazador toma todos los archivos objeto (código compilado) y también todas las bibliotecas estáticas y produce un ejecutable o binaria.

Más información acerca de las bibliotecas estáticas (beneficios, comparando dinámica, etc ...):

Entre otras cosas, es bueno para separar el proyecto en las bibliotecas para que no terminen con 1 gran proyecto monolítico.

No es necesario distribuir el código fuente (típicamente en los archivos .cpp) de esta manera.

si tuviera que simplemente incluir todos los archivos .cpp en cada proyecto que utiliza la biblioteca común, entonces tendría que compilar los archivos de la .cpp cada vez.

Una ventaja de las bibliotecas estáticas sobre las bibliotecas dinámicas es que siempre puede estar seguro de que sus programas serán independientes y que están utilizando la versión correcta de la biblioteca (ya que se compilan en el ejecutable). También tendrá una ligera ventaja de velocidad sobre los enlaces dinámicos.

Las desventajas de las bibliotecas estáticas sobre las bibliotecas dinámicas incluyen que los tamaños de los archivos serán mayores porque cada ejecutable necesita su propia copia, y que no puede cambiar una versión diferente de la biblioteca ya que no está cargada dinámicamente.

Re pregunta: ¿Cómo las empresas hacer frente a esto:

Una típica empresa hará uso de las dos bibliotecas estáticas y dinámicas ampliamente.

+0

@Brian - Entendido. ¿Tiene una referencia para bibliotecas dinámicas en OS X? – MLS

+1

Otro beneficio para cualquier tipo de biblioteca: tiempo de compilación reducido. – WhirlWind

+0

http://developer.apple.com/Mac/library/documentation/DeveloperTools/Conceptual/DynamicLibraries Y, si está hablando de OS X, es probable que desee estudiar la creación de un marco, que es (básicamente) un camino de empaquetar juntos una biblioteca y los encabezados correspondientes –

2

La manera típica de utilizar una biblioteca estática es tener un objetivo en su Makefile (o en cualquier sistema de compilación que use) que instale los encabezados en una ubicación adecuada al mismo tiempo que instala la biblioteca.

Por lo tanto, su biblioteca estática termina en/usr/local/lib, y los encabezados van a/usr/local/include o donde sea.

0

Además, cuando se compara con la vinculación con archivos de objetos, el resultado puede ser un archivo ejecutable final más pequeño. La razón para esto es que si no llama a ninguna de las funciones de un archivo de objeto en particular (incluido en la biblioteca estática), el vinculador no incluirá el código para esas funciones en su ejecutable final. Ver Extraneous Library Linkage

Cuestiones relacionadas