Pregunta

Es correcto enlace de una biblioteca estática (.lib) compilado con VS 2005 con un programa que está compilado con VS 2008?Tanto la biblioteca y mi programa está escrito en C++.Este programa se ejecuta en Windows Mobile 6 Profesional emulador.

Esto parece funcionar, no hay errores de vinculación.Sin embargo, el programa se bloquea durante el inicio porque las cosas extrañas que suceden en el interior de la biblioteca de enlaces.E. g.lib puede devolver un vector de caracteres con el tamaño de gran número negativo.

No hay ningún tipo de problemas cuando el programa se compila con VS 2005.

Lo que es aún más extraño que el problema es solo cuando el uso de configuración de lanzamiento para la construcción.Cuando se compila utilizando la configuración de depuración no se produce el problema.

¿Fue útil?

Solución

VS2005 y VS2008 uso diferentes STL implementaciones.Cuando el VS2005 código devuelve un vector, el objeto tiene un diseño de memoria diferente de lo que VS2008 espera.Esa debe ser la razón por la quebrada de los valores que ves en la fecha devuelta.

Como regla general, siempre se debe compilar todos los C++ módulos de un proyecto con el mismo compilador y todos los ajustes/#define igual.

Uno en particular #define que provoca un comportamiento similar es el SECURE_SCL #define de VS2008.Dos módulos compilados con diferentes ajustes de crear exactamente sus problemas, porque #definición de SECURE_SCL introduce más variables miembro a varios C++ biblioteca de clases.

Otros consejos

No es incorrecto enlace a una antigua biblioteca en la manera que usted describe, pero no me sorprende que estamos viendo algún comportamiento extraño.Par de comprobaciones de validez:

  • Ambos son archivos mediante el mismas versiones de la mismo bibliotecas de tiempo de ejecución?
  • Es su .EXE de la aplicación de "ver" los mismos archivos de encabezado que el .LIB fue construido en contra?Asegúrese de que el _WIN32_WINNT (etc.) las macros son declarado correctamente.

Y cuando usted dice .LIB, ¿te refieres a una verdadera biblioteca estática (mylib.lib) o una biblioteca de importación para un archivo DLL (mylib.lib -> mylib.dll)?

Y ¿cuáles son los compilar/link configuración de su VS2008 proyecto ejecutable?

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