2011-06-01 9 views
10

Perdón por el título vago de la pregunta, solo quiero aclarar algunas cosas.¿Las bibliotecas estáticas, que dependen de otros slibs, necesitan el "código" real para que funcionen?

Las bibliotecas estáticas no se vinculan con otras bibliotecas estáticas, ¿no?

Así que cuando escribo un slib: A, que usa la funcionalidad de otro: B, todo lo que tengo que proporcionar son los encabezados de B a A, y solo aquellos, incluso si A realmente usa la funcionalidad de B? ¿Sí?

Siempre que exe: X, que usa A, tiene B.lib especificado como entrada de enlazador?

De modo que en el tiempo de enlace, el enlazador toma A.lib, que básicamente solo sabe que una función de B se llamó en algún lugar dentro de su código y de alguna manera llena esa información de B.lib, haciendo A.lib 'entero' , antes de que X se vincule con las partes que ahora funcionan?

La motivación detrás de estas preguntas es deshacerse de algunas advertencias del enlazador 4006 y de las definiciones dobles descartadas, y creo que debería funcionar, si esto es realmente una forma válida de hacerlo.

Respuesta

8

Sí, lo tienes muy bien. Los archivos ejecutables (y DLL) que dependen de bibliotecas estáticas no se pueden crear sin que esas dependencias se resuelvan, pero las bibliotecas estáticas que contienen dependencias en otras bibliotecas estáticas no requieren que esas dependencias se resuelvan en el tiempo de creación de la biblioteca estática. De hecho, el proceso de creación de una biblioteca estática no involucra al enlazador en absoluto.

+0

Butterworth: Impresionante, gracias por aclarar, no confié en mi entendimiento, ya que aparte de los recursos netos estoy solo aprendiéndolo, y este comportamiento de slibs me desató en ese momento. – Erius

2

Realmente no puedo agregar la respuesta de Neils excepto para decir que una biblioteca estática es realmente solo un conjunto completo de archivos de objetos (.o) recopilados en un solo archivo indexado. Entonces, lo que funciona para un archivo .o funcionará para una biblioteca estática.

Cuestiones relacionadas