Compilación del programa OpenGL 4.0 estático simple usando MinGW, freeglut y glew

El problema está en el título, intentaré enumerar lo que ya probé y así sucesivamente a continuación.

En primer lugar, a mi entender, para usar OpenGL 4.0 en Windows, debe ampliar y / o omitir la biblioteca de Windows predeterminada, ya que solo se distribuye OpenGL 1.1.

Así que tenemos MinGW instalado enC:/MinGW/. A continuación configuro FreeGLUT descargando eltarball desde elSitio del proyecto. Extraiga y compile ejecutando los makefiles de acuerdo con elinstrucciones con una pequeña adición de--prefix al./configure mando.

./configure --prefix=/c/Users/Owner/root/
make all
make install 

Ahora tengo freeglut en/c/Users/Owner/root/lib/, /c/Users/Owner/root/include/ y así. El siguiente es GLEW, mi problema infantil, por lo que puedo decir.

Descargue el archivo fuente deel sitio del proyecto (enlace directo 1.7.0.zip). La compilación es un poco más complicada, mi receta actual se deriva de la pregunta de desbordamiento de pila "La construcción de glew en windows con mingw ". Una forma abreviada se lista a continuación:

mkdir lib/
mkdir bin/
gcc -DGLEW_NO_GLU -O2 -Wall -W -Iinclude -DGLEW_BUILD -o src/glew.o -c src/glew.c
gcc -shared -Wl,-soname,libglew32.dll -Wl,--out-implib,lib/libglew32.dll.a -o lib/glew32.dll src/glew.o -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32
ar cr lib/libglew32.a src/glew.o
gcc -DGLEW_NO_GLU -DGLEW_MX -O2 -Wall -W -Iinclude -DGLEW_BUILD -o src/glew.mx.o -c src/glew.c
gcc -shared -Wl,-soname,libglew32mx.dll -Wl,--out-implib,lib/libglew32mx.dll.a -o lib/glew32mx.dll src/glew.mx.o -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32
ar cr lib/libglew32mx.a src/glew.mx.o

y debe ejecutarse desde la "raíz" de/path/to/glew-1.7.0/.

Ahora, con la configuración de las bibliotecas "hecha" (suponiendo que no haya errores ...), la compilación de mi programa simple se realiza con esta línea.

${G++}  -DFREEGLUT_STATIC -DGLEW_STATIC -m32 main.cpp -o main.exe -lfreeglut_static -lopengl32 -lwinmm -lgdi32 -lglew32  -I ${ROOTPATH}/include -L ${ROOTPATH}/lib --static

Ahora, para descomponer esto un poco y repasar por qué tengo varios argumentos "extra" y mostrarle los errores y problemas que ya encontré y resolví.

-DFREEGLUT_STATIC y-lfreeglut_static se utilizan en lugar de lo normal-lfreeglut Como queremos una construcción estática aquí. El no hacer esto da errores de vinculador relacionados con freeglut.-DGLEW_STATIC Se agrega por la misma razón.-lwinmm Se agrega para corregir el error del enlazador:freeglut_init.c:(.text+0x5d9): undefined reference to '_timeBeginPeriod@4'.-lgdi32 Se agrega para corregir el error del enlazador:c:/Users/Owner/root//lib\libfreeglut_static.a(freeglut_init.o):freeglut_init.c:(.text+0x58c): undefined reference to '_GetDeviceCaps@8'

Ahora estoy perplejo con el siguiente error del enlazador:

c:/Users/Owner/root//lib\libglew32.a(glew.o):glew.c:(.text+0x83e8): undefined reference to `_glGetString@4'
c:/Users/Owner/root//lib\libglew32.a(glew.o):glew.c:(.text+0xa1b2): undefined reference to `_glGetString@4'
c:/Users/Owner/root//lib\libglew32.a(glew.o):glew.c:(.text+0xa290): undefined reference to `_glGetString@4'

El caso de prueba mínimo que produce este error (main.cpp) es.

#include <GL/glew.h>
#include <GL/freeglut.h>

int main(int argc, char **argv) {
  glEnableVertexAttribArray(0);
}

Ideas?

Respuestas a la pregunta(2)

Su respuesta a la pregunta