sirve - C++: ¿Qué hace realmente#pragma comment(lib, “XXX”) con “XXX”?
para que sirve#pragma once (3)
Ese pragma
se usa para enlazar contra el archivo .lib
especificado. Esta es una alternativa a especificar la biblioteca en el campo de dependencias externas en la configuración del proyecto.
Sobre todo, se utiliza para soportar diferentes versiones:
#ifdef USE_FIRST_VERSION
#pragma comment(lib, "vers1.lib")
#else
#pragma comment(lib, "vers2.lib")
#endif
Cuando su aplicación utiliza una biblioteca enlazada dinámicamente, un archivo lib
le informa sobre qué símbolos se exportan en la dll
. Básicamente, solo necesitas el lib
para compilar y vincular, pero necesitas el dll
para ejecutar el programa, ya que contiene todo el código binario.
Usted dice que hay un dll
asociado, que generalmente indica que el archivo lib
solo contiene información de enlace, y no código. Debería obtener un error en tiempo de ejecución si no se encontró el dll
asociado. Puede verificar con MSVS si se cargó una versión diferente de la dll
o si se cargó desde un lugar diferente.
Mi fondo es C # pero tengo que mantener algo de C ++ heredado (MS). En esa base de código me topé con:
#pragma comment(lib, "OtherLib700.lib")
donde 700 es un versionado. Además de la lib es una DLL con el mismo nombre.
Primero pensé que el programa dependería de la DLL, pero después de eliminarlo del sistema, el programa aún funciona. Sin embargo, existe una versión más reciente de la DLL, que se llama OtherLib900 ...
Parece que el programa ''incluyó'' el código de la biblioteca de modo que ya no depende de la DLL externa. (O que el programa "automáticamente" usa la DLL más nueva ...)
¿Cuál es la correcta? ¿Hay alguna manera de confirmar aún más ese "supuesto"?
Si la .lib es una biblioteca "real" con el código real (nunca he usado DLL para guardar las proporcionadas por el sistema, pero creo que creas ''libs de importación'' para tus propias DLL), entonces la DLL no es necesario.
En cuanto al tema, #pragma comment (lib, xxx) permite que los programas agreguen ciertas opciones para el enlazador. Puede ser muy útil, aunque me he perdido algunas opciones que me hubiera gustado agregar de esta manera. El ejemplo dado es un ejemplo principal para su uso: cuando el archivo objeto se incluye en el programa, también se agregará la lib especificada.
Si un programa tiene este pragma, buscará la biblioteca OtherLib700.lib
. Si esa es una biblioteca de importación cuando el programa está cargado, Windows buscará OtherLib700.dll
en la ruta. No intentará buscar OtherLib900.dll
durante la ejecución, por lo que debe estar encontrando su dll
en una carpeta diferente. Esto supone que OtherLib700.lib
es una biblioteca de importación y no una biblioteca estática. Si OtherLib700.lib es una biblioteca estática, eso es todo lo que necesita.