e.exe
está vinculada a mi biblioteca estática personalizada, c.lib
, que usa Win32 API definida en w.dll
. w.dll
se encuentra en C: \ Windows \ System32 y su biblioteca de importación es w.lib
, ubicada en el directorio Windows SDK. Shell w.lib
aparece como Dependencia adicional en c.lib
o e.exe
proyecto? (e.exe
se construye con éxito en ambos casos.) ¿Cuál es la mejor práctica y por qué? Supongo que e.exe
no debería saber acerca de w.lib
.Biblioteca estática con dependencias
c.lib
está destinado a ser compartido solo entre un grupo de desarrolladores (no para ser enviado a los clientes).
TEST: I utiliza VS2008 y dumpbin utilidad para poner a prueba ambos casos y aquí están los resultados:
- Caso 1:
w.lib
añadió como dependencia adicional enc.lib
proyecto.
dumpbin /archivemembers c.lib
listas de salida ambas compensaciones en w.dll
y archivos .obj de c.lib
proyecto como miembros del archivo.
- Caso 2:
w.lib
no se agrega como dependencia adicional enc.lib
pero ene.exe
proyecto:
Esta vez, dumpbin salida contiene sólo los archivos .obj de c.lib
y el tamaño de c.lib
es menor que en el asunto 1
(c.lib
se añadió como dependencia adicional en w.exe
proyecto en ambos casos)
NOTA:. I utiliza w.lib
y w.dll
aquí como ficticia, nombres genéricos para las bibliotecas de Windows pero podrían ser, por ejemplo, Userenv.lib y Userenv.dll o Version.lib y Version.dll ...
Gracias por la respuesta exhaustiva. Mi presunción inicial era incorrecta: pensé que era deseable no conocer las dependencias de lib, pero ahora, cuando lo miro desde el punto de vista * import library + code *, tiene sentido que el exe sepa cuál es su código (que en realidad incluye código de lib estático) depende de. –
Estoy confundido por esta respuesta. ¿No es común construir bibliotecas sobre bibliotecas? Cualquier biblioteca extendida se consideraría "biblioteca de importación + código". Creo que es una buena práctica ocultar los detalles de la biblioteca que se está construyendo. – jwalk