Mezcla de bibliotecas estáticas de código C creadas a partir de diferentes versiones de Visual Studio 2002 y posteriores

StackOverflow https://stackoverflow.com/questions/462768

Pregunta

Tengo una biblioteca enlazable estática de rutinas C y Fortran compiladas y enlazadas juntas usando el compilador Visual Studio 2002 C (v7.0) y el compilador Intel Fortran 9.0.018.

El código C en mi biblioteca llama y enlaza con las bibliotecas estáticas de Microsoft C-RunTime (MSCRT) 2002 (de un solo subproceso). Creo que el número de versión real de las bibliotecas CRT 2002 es v7.0

Me referiré a esta biblioteca estática como "vs2002if9.lib"

¿Puedo enlazar estáticamente a mi " vs2002if9.lib " ¿usa de forma segura cualquier versión posterior de Visual Studio (2003, 2005 o 2008) sin preocuparse por cómo se comporta el programa de llamadas con respecto a las llamadas en tiempo de ejecución de C?

¿O estoy creando problemas al mezclar la versión de las bibliotecas estáticas CRT?

¿Qué sucede si proporciono mi " vs2002if9.lib " a desarrolladores de software de terceros? ¿Qué requisitos les estoy imponiendo?

¿Fue útil?

Solución

Mezclar tiempos de ejecución C no me ha funcionado en el pasado. La única forma en que puedo ver que esto funciona {quizás} es si está aislando por completo el uso de la pila / montón dentro de los límites del tiempo de ejecución C estáticamente vinculado [nada cruza los límites a través de parámetros, pero entonces qué valor es su vs2009if9 .lib proporcionando].

Como ejemplo, si va a asignar un puntero [memoria de montón] dentro de la aplicación y pasar este puntero a la biblioteca que proporcionó, ¿qué administrador de montón debería usarse? La respuesta correcta es el administrador de almacenamiento dinámico que administra el puntero, pero su biblioteca no sabrá sobre el otro administrador de almacenamiento dinámico. Se vuelve más feo si su biblioteca asigna memoria para uso de la aplicación y es responsabilidad de las aplicaciones liberar / eliminar usando el puntero proporcionado (diseño incorrecto sí pero aún posible). Nuevamente, se utilizará el administrador de montón incorrecto.

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