Kompilacja Prosty statyczny program OpenGL 4.0 wykorzystujący MinGW, freeglut i glew

Problem jest w tytule, postaram się wymienić to, co już wypróbowałem i tak dalej poniżej.

Po pierwsze, w moim rozumieniu, aby korzystać z OpenGL 4.0 w systemie Windows, należy rozszerzyć lub pominąć domyślną bibliotekę systemu Windows, ponieważ jest ona dostarczana tylko z OpenGL 1.1.

Mamy więc zainstalowany MinGWC:/MinGW/. Następnie konfiguruję FreeGLUT, pobierająctarball zStrona projektu. Rozpakuj i skompiluj, uruchamiając pliki makefile zgodnie zinstrukcje z niewielkim dodatkiem--prefix do./configure dowództwo.

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

Teraz mam freeglut/c/Users/Owner/root/lib/, /c/Users/Owner/root/include/ i tak dalej. Następna jest GLEW, moje problemowe dziecko, o ile mi wiadomo.

Pobierz archiwum źródłowe zstrona projektu (link bezpośredni 1.7.0.zip). Kompilacja jest nieco bardziej skomplikowana, mój obecny przepis pochodzi z pytania o przepełnienie stosu ”Budynek wznosił się na oknach z mingw „. Skrócona forma znajduje się poniżej:

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

i powinien być uruchamiany z „korzenia”/path/to/glew-1.7.0/.

Teraz z ustawieniem bibliotek „gotowe” (zakładając brak błędów ...) kompilowanie mojego prostego programu odbywa się za pomocą tej linii.

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

Teraz, aby trochę to rozłożyć i przejrzeć, dlaczego mam różne „dodatkowe” argumenty i pokazać, jakie błędy i problemy już przeszedłem i rozwiązałem.

-DFREEGLUT_STATIC i-lfreeglut_static są używane zamiast normalnych-lfreeglut ponieważ chcemy tutaj kompilacji statycznej. Niezastosowanie się do tego powoduje błędy linkera związane z freeglut.-DGLEW_STATIC jest dodawany z tego samego powodu.-lwinmm dodaje się, aby naprawić błąd linkera:freeglut_init.c:(.text+0x5d9): undefined reference to '_timeBeginPeriod@4'.-lgdi32 dodaje się, aby naprawić błąd linkera:c:/Users/Owner/root//lib\libfreeglut_static.a(freeglut_init.o):freeglut_init.c:(.text+0x58c): undefined reference to '_GetDeviceCaps@8'

Teraz mam problem z następującym błędem linkera:

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'

Minimalny przypadek testowy powodujący ten błąd (main.cpp) jest.

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

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

Pomysły?

questionAnswers(2)

yourAnswerToTheQuestion