Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: WalterBlanco en 14 Septiembre 2015, 01:07 am



Título: Encabezados precompilados en Visual C++
Publicado por: WalterBlanco en 14 Septiembre 2015, 01:07 am
Hola:

Estoy aprendiendo Visual C++. Hice una aplicación sencilla, creada a partir de un proyecto "empty". Empecé a agregar cosas y mientras compilaba debug, no tuve problemas. Cuando quise compilar release me di cuenta que debía utilizar encabezados precompilados para obtener programas mas eficientes en compilación. Pero hasta ahora se ma ha hecho imposible compilar la versión release de mi programa porque no he podido generar los encabezados precompilados a partir de stdafx.h y stdafx.cpp. El error que me da es que no tengo el archivo .pch. He seguido las sugerencias de algunos amigos para realizar la precompilación de mis encabezados pero nada parece funcionar. Con la opción debug el programa compila bien y se ejecuta sin problemas, pero al cambiar a la opción release, me manda errores de compilación. Cada vez que hago algún cambio en la configuración de compilación me encuentro con nuevos errores al compilar release. ¿Alguien tiene alguna idea sobre cómo se puede resolver esto?

Gracias.


Título: Re: Encabezados precompilados en Visual C++
Publicado por: WalterBlanco en 22 Septiembre 2015, 16:43 pm
Aunque nadie comentó sobre mi duda, veo que algunos entraron. Así que podría ser de interés para algunos saber cómo solucioné el problema planteado.

Básicamente, lo que hice fue:
1- Revisar una a una las propiedades del Compilador C/C++ y del Vinculador.  Busqué información sobre cuál era la opción más conveniente en cada caso para compilar RELEASE en mi máquina. Bastante tedioso y lleva mucho tiempo.
2- En mi proyecto usaba OpenCV. Después de un rato me percaté que los archivos de biblioteca opencv que incluía para la compilación DEBUG no son los mismos que se deben usar en la compilación RELEASE. Para compilar DEBUG en la versión OpenCv 2.4.10 debe incluir como dependencias adicionales las siguientes librerias:
opencv_calib3d2410d.lib
opencv_contrib2410d.lib
opencv_core2410d.lib
opencv_features2d2410d.lib
opencv_flann2410d.lib
opencv_highgui2410d.lib
opencv_imgproc2410d.lib
opencv_legacy2410d.lib
opencv_ml2410d.lib
opencv_nonfree2410d.lib
opencv_objdetect2410d.lib
opencv_photo2410d.lib
opencv_stitching2410d.lib
opencv_superres2410d.lib
opencv_ts2410d.lib
opencv_video2410d.lib
opencv_videostab2410d.lib

Para compilar RELEASE deberá incluir:
opencv_calib3d2410.lib
opencv_contrib2410.lib
opencv_core2410.lib
opencv_features2d2410.lib
opencv_flann2410.lib
opencv_highgui2410.lib
opencv_imgproc2410.lib
opencv_legacy2410.lib
opencv_ml2410.lib
opencv_nonfree2410.lib
opencv_objdetect2410.lib
opencv_photo2410.lib
opencv_stitching2410.lib
opencv_superres2410.lib
opencv_ts2410.lib
opencv_video2410.lib
opencv_videostab2410.lib
OJO: Observe que las bibliotecas para DEBUG tienen una letra "d" antes del ".lib".

No repitan las bibliotecas para compilar DEBUG junto con las de compilar RELEASE porque aparecerán símbolos definidos dos o más veces.

También sugiero tener cuidado con las referencias externas, establecer el punto de entrada en el Vinculador y no dejar de incluir ninguna biblioteca que vayan a necesitar.

NOTA: Estoy trabajando con la versión Visual Studio 2013 Ultimate.