es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Visual Studio: Construir una biblioteca puramente estática de C++ (“sin dependencias”)

Estoy intentando crear una biblioteca estática que otros puedan utilizar (y que puedan utilizarla tanto si depuran su propio código como si no lo hacen). Por otro lado, mi biblioteca no debe contener ningún símbolo de depuración o similar. Solo quiero liberar los encabezados y el archivo .lib (sin .dll ni nada parecido).

El usuario de la biblioteca debería poder utilizar su entorno de tiempo de ejecución y sabor de compilación (depuración o liberación) sin problemas.

¿Es esto posible con Visual Studio? [> He leído que algunos usuarios cambian a GCC para compilar este tipo de bibliotecas]

He probado varios casos y siempre obtengo algo como “ITERATOR DEBUG_LEVEL” en conflicto o similar. La vinculación estática de las bibliotecas de tiempo de ejecución tampoco parece ser la solución, ¿pero qué más hay? ¿Es posible desactivar todas las referencias y permitir que el proyecto que incorpora la biblioteca decida qué tiempo de ejecución utilizar?

Incluso si esta pregunta es similar a la siguiente, no he encontrado la respuesta correcta allí:
https://stackoverflow.com/questions/39018250/pure-static-c-library-no-dependency-of-msvc-c-runtime?noredirect=1&lq=1
u aquí
https://stackoverflow.com/questions/14749662/microsoft-visual-studio-c-c-runtime-library-static-dynamic-linking

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible construir una biblioteca estática en Visual Studio sin símbolos de depuración y con la capacidad de que los usuarios usen su propio entorno de tiempo de ejecución y sabor de construcción. Una forma de hacerlo es usar la bandera /MT en lugar de /MD al construir la biblioteca. Esto vinculará la biblioteca de tiempo de ejecución estática en el archivo .lib, haciendo que sea autocontenido y no dependiente de ninguna biblioteca de tiempo de ejecución externa. Además, es importante no incluir símbolos de depuración al construir la biblioteca.

    Para evitar conflictos con la configuración _ITERATOR_DEBUG_LEVEL, es importante asegurarse de que tanto la biblioteca como el proyecto que usa la biblioteca se construyan con la misma configuración. Una forma de hacer esto es definir la configuración _ITERATOR_DEBUG_LEVEL en un archivo de encabezado que sea incluido tanto por la biblioteca como por el proyecto.

    En general, construir una biblioteca estática sin dependencias externas puede ser desafiante, pero con atención cuidadosa a los detalles y configuración cuidadosa de la configuración de construcción de Visual Studio, es posible crear una biblioteca que sea fácil de usar y compatible con una amplia variedad de entornos de tiempo de ejecución.

Comments are closed.