Problem jest w tytule, spróbuję wymienić to, co już wypróbowałem i tak dalej.Kompilowanie Prosty statyczny program OpenGL 4.0 przy użyciu MinGW, freeglut i gfl
Po pierwsze, w moim rozumieniu, aby móc korzystać z OpenGL 4.0 w oknach, należy rozszerzyć lub pominąć domyślną bibliotekę okien, ponieważ jest to tylko OpenGL 1.1.
Mamy więc zainstalowany MinGW o numerze C:/MinGW/
. Następnie konfiguruję FreeGLUT pobierając tarball z project site. Wyodrębnij i skompiluj, uruchamiając pliki makefile zgodnie z instructions z dodatkowym dodatkiem --prefix
do polecenia --prefix
do polecenia --prefix
.
./configure --prefix=/c/Users/Owner/root/
make all
make install
Teraz mam freeglut w /c/Users/Owner/root/lib/
, /c/Users/Owner/root/include/
i tak dalej. Następnym etapem jest GLEW, moje problematyczne dziecko, o ile wiem.
Pobierz archiwum źródłowe z the project site (direct 1.7.0.zip link). Kompilacja jest nieco bardziej skomplikowana, moja obecna receptura wywodzi się z pytania przepełnienia stosu "Building glew on windows with mingw". Formą skrócie przedstawiono 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 „korzeń” z /path/to/glew-1.7.0/
.
Teraz z konfiguracją bibliotek „done” (zakładając, że nie ma błędów ...) kompilowania mojego prostego programu odbywa się z 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 rozkładać to nieco i spacer dlaczego mam różne argumenty „ekstra” i pokazać, jakie błędy i problemy Już napotkasz i rozwiązany.
-DFREEGLUT_STATIC
i-lfreeglut_static
są stosowane zamiast normalnego-lfreeglut
jak chcemy budować statycznego tutaj. Niewykonanie tej czynności powoduje błędy linkera związane z freeglut.-DGLEW_STATIC
jest dodawany z tego samego powodu.-lwinmm
został dodany, aby naprawić błąd łącznika:freeglut_init.c:(.text+0x5d9): undefined reference to '[email protected]'
.-lgdi32
dodaje naprawić błąd linkera:c:/Users/Owner/root//lib\libfreeglut_static.a(freeglut_init.o):freeglut_init.c:(.text+0x58c): undefined reference to '[email protected]'
Teraz jestem zakłopotany z powodu następującego błędu łącznikowej:
c:/Users/Owner/root//lib\libglew32.a(glew.o):glew.c:(.text+0x83e8): undefined reference to `[email protected]'
c:/Users/Owner/root//lib\libglew32.a(glew.o):glew.c:(.text+0xa1b2): undefined reference to `[email protected]'
c:/Users/Owner/root//lib\libglew32.a(glew.o):glew.c:(.text+0xa290): undefined reference to `[email protected]'
Minimalna przypadek testowy, która produkuje ten błąd (main.cpp
) jest.
#include <GL/glew.h>
#include <GL/freeglut.h>
int main(int argc, char **argv) {
glEnableVertexAttribArray(0);
}
Pomysły?
Spróbuj dodać -lopengl32 na końcu, aby skompilować program i sprawdzić, czy to pomaga. EDYCJA: Powinien prawdopodobnie być -lfreeglut_static jak mówi genpfault, czytam zbyt szybko. – Jite
@Jite To działa! (w minimalnym przypadku testowym) O.o Proszę, odpowiedz na to, abym mógł go przyjąć i zaakceptować. Nie mogę uwierzyć, że udało mi się ominąć kombinację argów GCC, tak jak próbowałem około 12 różnych zestawów! Jeszcze lepiej, jeśli Ty lub ktoś inny mógłbyś podać informacje o _how_, aby wybrać kolejność bibliotek inną niż losowe próby kombinacji. – nixeagle
Cieszę się, że działało! Myślę, że ktoś inny będzie musiał to wyjaśnić głębiej, ale z tego, co rozumiem, popraw mnie, jeśli się mylę, chodzi o shadowing, tak jak jeśli masz dwie biblioteki definiujące funkcję o tej samej nazwie, ostatnia połączona wola cienia przeora. – Jite