Pregunta

Decir que tengo un C ++ estática lib, static.lib y quiero llamar a algunas funciones de una librería compartida C ++, por ejemplo shared.lib. ¿Es posible?

Supongamos ahora que tengo otra librería compartida, digo shared2.lib que enlaza con static.lib pero no está asociada al shared.lib. ¿El enlazador enlazar automáticamente a shared2.lib shared.lib en este caso?

Estoy utilizando Microsoft Visual Studio 2003.

¿Fue útil?

Solución

bibliotecas estáticas no están vinculados. Ellos son sólo una colección de archivos de objetos (* .obj o * .o) que se archivan juntos en un archivo de biblioteca (un poco como un archivo tar / zip) para que sea más fácil para el enlazador para encontrar los símbolos que necesita.

Un lib estática puede llamar a funciones que no están definidos (pero se declaran sólo en un fichero de cabecera), ya que sólo se compila. A continuación, cuando se vincula un exe o DLL que utiliza el lib estática, tendrá que enlazar con otra biblioteca que proporciona la llama de la lib estática pero no definida en el mismo.

Si desea que el enlazador automáticamente enlace Otro bibliotecas sugerencia de Stephen trabajarán y es utilizado por las bibliotecas de muy buena reputación como impulso y STLport. Para ello puso el pragma en el archivo de encabezado principal para la biblioteca estática. Debe incluir la biblioteca estática y sus dependientes.

Sin embargo OMI esta característica sirve realmente para los escritores de la biblioteca, donde la biblioteca está en la ruta de la biblioteca sistema para que el enlazador encontrarlo fácilmente. También en el caso del impulso y STLport que utilizan esta característica para soportar múltiples versiones de las mismas bibliotecas con las opciones definidas con #defines donde las diferentes opciones requieren diferentes versiones de la biblioteca para ser vinculado. Esto significa que los usuarios tienen menos probabilidades de configurar impulso de una manera y con una biblioteca de enlace configurado otro.

Mi preferencia por código de aplicación es vincular explícitamente las piezas necesarias.

Otros consejos

El enlazador no traerá automáticamente en las otras bibliotecas, pero se puede usar comentario #pragma (lib, "static.lib") para simplificar el proceso de vincular los archivos adicionales mediante la adición de la pragma a sus archivos de cabecera.

  

Decir que tengo un C ++ lib estática,   static.lib y quiero llamar a algunos   funciones de C ++ compartían lib, dicen   shared.lib. ¿Es posible?

Sí, por ejemplo, cuando se llama a las funciones de Windows desde dentro de su lib estática que son normalmente de alguna biblioteca dinámica por lo que no debería haber ninguna diferencia.

  

Supongamos ahora que he compartido otro   lib, shared2.lib decir que enlaza con   static.lib pero no se vincula a   shared.lib. ¿El enlazador   vincular de forma automática a shared2.lib   shared.lib en este caso?

Tener dependencias como éste podría causar problemas más adelante, sugeriría que en vez de cargar dinámicamente las bibliotecas usando LoadLibrary () , de esa manera no es necesario hacer un seguimiento de dichas dependencias durante la compilación / enlace.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top