Mezcla de errores y biblioteca de versiones / binario: ¿mala práctica?

¿Es una mala práctica usar una versión de lanzamiento de una biblioteca de terceros en depuración binaria?

Estoy usando una biblioteca de terceros y compilé una biblioteca de .lib de lanzamiento. Mi exe está en desarrollo de modo de depuración. Entonces obtuve:

error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in test1.obj 

Después de buscar en Google, descubrí que es porque estoy tratando de mezclar la versión con la depuración, y probablemente debería comstackr la biblioteca en modo de depuración o complicar la macro _ITERATOR_DEBUG_LEVEL. Pero solo tengo curiosidad si esa es la forma recomendada y por qué. Parece engorroso que deba comstackr y mantener un registro de los archivos binarios tanto de versión como de depuración para cada biblioteca de terceros que pretendo utilizar, lo cual será muy pronto, sin tener la intención de depurar este código.

Mezclar el código de depuración y liberación es una mala práctica. El problema es que las diferentes versiones pueden depender de diferentes partes fundamentales de la biblioteca de tiempo de ejecución de C ++, como cómo se asigna la memoria, las estructuras para elementos como iteradores pueden ser diferentes, se podría generar código adicional para realizar operaciones (por ejemplo, iteradores marcados).

Es lo mismo que mezclar archivos de biblioteca creados con cualquier otra configuración diferente. Imagine un caso en el que un archivo de encabezado contiene una estructura que es utilizada tanto por la aplicación como por la biblioteca. La biblioteca está construida con el empaquetado de la estructura y la alineación configurados en un valor y la aplicación construida con otro. No hay garantías de que el paso de la estructura desde la aplicación a la biblioteca funcione, ya que podrían variar en tamaño y posiciones de miembros.

¿Es posible construir sus bibliotecas de terceros como DLL? Suponiendo que la interfaz para cualquier función es más limpia y no intenta pasar ningún objeto STL, podrá mezclar una aplicación de depuración con DLL de lanzamiento sin problemas.

El hecho de que no comstack debería ser suficiente para demostrar que es una mala práctica.

En cuanto a mantener comstackciones separadas, no es necesario que haga eso. Aquí hay una solución que anteriormente funcionó para mí:

 #ifdef _DEBUG #define DEBUG_WAS_DEFINED #undef _DEBUG #endif #include  #ifdef DEBUG_WAS_DEFINED #define _DEBUG #endif 

Hazme saber si esto funciona para ti.