miércoles, 27 de febrero de 2008

Actualizando Glut

¡Hey! Esto sí está lejos de ser una solución oficial, pero funciona suficientemente bien.

Resulta que algunas personas hemos intentado utilizar la vieja biblioteca GLUT con versiones actuales del Visual Studio, díganse, 2003, 2005 o 2008. En el momento en el que uno intenta compilar alguna aplicación que dependa de GLUT, aparece el siguiente error:

c:\program files\microsoft visual studio 9.0\vc\include\stdlib.h(371) : error C2381: 'exit' : nueva definición; __declspec(noreturn) es diferente
c:\documents and settings\...\gl\glut.h(146) : vea la declaración de 'exit'

o una versión en inglés:

C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdlib.h(371) : error C2381: 'exit' : redefinition; __declspec(noreturn) differs
c:\Documents and Settings\Owner\Desktop\FG WIN32 compile\3rdparty\include\GL/glut.h(146) : see declaration of 'exit'

Bueno, resulta que algunas definiciones en stdlib.h han sido actualizadas.

Lo primero que se me ocurrió fue recompilar GLUT, bajándo el código fuente de la liga citada arriba, sin embargo, apareció el mismo error, acompañado de otras advertencias. La solución es simple, hay que modificar la línea 146 de glut.h:

Cambiar:
extern _CRTIMP void __cdecl exit(int);

Por:
extern _CRTIMP __declspec(noreturn) void __cdecl exit(int);

Con esto, en lugar de error, se obtendrá otra advertencia, pero las aplicaciones compilan y corren. (También aparece el error de que no logra instalar glut.lib y glut.h en los directorios indicados, que son del visual studio viejo, pero es pecata minuta, en el peor de los casos se pueden copiar a mano.) Sospecho que incluso basta con hacer esta modificación en glut.h y no es necesario recompilar toda la biblioteca.

Sin embargo ojo, al compilar la biblioteca recuerdo haber visto inclusive advertencias sobre funciones deprecadas, por lo que puede que este parche no dure mucho y haya que hacer una revisión más cuidadosa de glut.

6 comentarios:

Anónimo dijo...

Perfecto, muchísimas gracias por la solución. Lo daba todo por perdido.

Anónimo dijo...

HOYGAN man ps me eqivokido la linea al reves y funca!!!

Anónimo dijo...

Muchas gracias!!!!

Anónimo dijo...

Muchas gracias de verdad, gente como tu hace falta en Internet!!

Anónimo dijo...

Hola,
Llegué a tu blog buscando el mismo error. Lo modifiqué como tú indicas y entonces funcionaba.
Sin embargo, hoy me he dado cuenta de que incluyendo stdlib.h primer y GL/glut.h después, sin modificarla, ya no da error. ¿Cierto?

Un saludo :)

fAuS dijo...

Wooooooow, un par de años después la solución sigue siendo útil, muchas gracias!!!