Einfaches statisches OpenGL 4.0-Programm mit MinGW, freeglut und glew kompilieren

Das Problem ist im Titel, ich werde versuchen, unten aufzulisten, was ich bereits ausprobiert habe und so weiter.

Wenn Sie OpenGL 4.0 für Windows verwenden möchten, müssen Sie zunächst die Standard-Windows-Bibliothek erweitern und / oder umgehen, da sie nur OpenGL 1.1 enthält.

Also haben wir MinGW bei installiertC:/MinGW/. Als nächstes richte ich FreeGLUT ein, indem ich das herunterladeTarball von demProjektseite. Extrahieren und kompilieren Sie, indem Sie die Makefiles gemäß den Anweisungen von ausführenAnleitung mit einem kleinen Zusatz von--prefix zum./configure Befehl.

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

Jetzt habe ich Freeglut in/c/Users/Owner/root/lib/, /c/Users/Owner/root/include/ und so weiter. Als nächstes kommt GLEW, mein Sorgenkind, soweit ich das beurteilen kann.

Laden Sie das Quellarchiv von herunterdie Projektseite (Direkter 1.7.0.zip Link). Das Kompilieren ist etwas komplizierter, mein aktuelles Rezept leitet sich aus der Stapelüberlauf-Frage ab. "Gebäude glew auf Fenstern mit Mingw ". Eine abgekürzte Form ist nachstehend aufgeführt:

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

und sollte von der "Wurzel" von ausgeführt werden/path/to/glew-1.7.0/.

Jetzt mit Setup der Bibliotheken "fertig" (vorausgesetzt, keine Fehler ...) Kompilieren mein einfaches Programm ist mit dieser Zeile fertig.

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

Nun, um dies ein wenig zu zerlegen und zu erläutern, warum ich verschiedene "zusätzliche" Argumente habe, und um Ihnen zu zeigen, auf welche Fehler und Probleme ich bereits gestoßen und diese behoben habe.

-DFREEGLUT_STATIC und-lfreeglut_static werden anstelle der normalen verwendet-lfreeglut wie wir hier einen statischen Build wollen. Andernfalls treten Linker-Fehler im Zusammenhang mit freeglut auf.-DGLEW_STATIC wird aus dem gleichen Grund hinzugefügt.-lwinmm wird hinzugefügt, um den Linkerfehler zu beheben:freeglut_init.c:(.text+0x5d9): undefined reference to '_timeBeginPeriod@4'.-lgdi32 wird hinzugefügt, um den Linkerfehler zu beheben:c:/Users/Owner/root//lib\libfreeglut_static.a(freeglut_init.o):freeglut_init.c:(.text+0x58c): undefined reference to '_GetDeviceCaps@8'

Jetzt bin ich mit folgendem Linker-Fehler überfordert:

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'

Der minimale Testfall, der diesen Fehler erzeugt (main.cpp) ist.

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

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

Ideen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage