2012-05-10 20 views
7

È stato già richiesto molto prima: Come si compila il sorgente GLEW 1.7.0 su Windows con MinGW? L'obiettivo è di collegarsi dinamicamente alla libreria da un progetto C++.Creazione di GLEW 1.7.0 su Windows utilizzando MinGW

Ulteriori informazioni: Sto lavorando con QtCreator, ergo uso qmake per la costruzione. Sono su Windows 7. Ormai ho provato/ho dato uno sguardo ai seguenti link.

use posted batch file also tried to replace gcc with g++

static with vc++ libs, build dll.a reuse vc++ .dll

Get MSYS run shipped makefile

Info on initial issues

simple stuff using GLEW msvc++ binaries, works on my desktop

Sfortunatamente tutte le soluzioni postate finiscono nei seguenti messaggi di errore per me, quando io uso i risultati elaborati nel mio projec t:

undefined reference to `[email protected]' 
debug/Ex04.o: In function `Z6initGLv': 
undefined reference to `[email protected]' 
undefined reference to `glEna[email protected]' 
debug/Ex04.o: In function `Z8updateGLv': 
undefined reference to `[email protected]' 
undefined reference to `[email protected]' 
collect2: ld returned 1 exit status 
mingw32-make.exe[1]: *** [debug/ecg4.exe] Error 1 
mingw32-make.exe: *** [debug] Error 2 

Sono alla fine del mio ingegno riguardo a questo problema. Ho doppio e triplo controllato il percorso LIBS in qmake e la variabile del percorso di Windows per includere la directory in cui glew dll è in diretta. Anche INCLUDEPATH di qmake dovrebbe andare bene. Qui i percorsi nel file .pro in ogni modo:

LIBS += -L$$quote(C:/mypath/freeglut/lib/) -lfreeglut 
LIBS += -L$$quote(C:/mypath/glew-1.7.0/lib/) -lglew32 -lglew32mx 
#LIBS+= C:/mypath/glew-1.7.0/lib/libglew32.dll.a 
#LIBS+= C:/Programming/glew-1.7.0/lib/libglew32mx.dll.a 

#includepath for project and the required libraries 
INCLUDEPATH += ./include 
INCLUDEPATH += "C:/mypath/glew-1.7.0/include" 
INCLUDEPATH += "C:/mypath/freeglut/include" 

Così, c'è qualcuno là fuori che potrebbe dare una serie infallibile di istruzioni su come ottenere il GLEW 1.7.0 sorgente compilato con MinGW?

risposta

12

Ok ho risolto.

Fondamentalmente ho compilato GLEW correttamente, per quanto posso vedere. Ho dimenticato di aggiungere -lopengl32 -lglu32 al percorso LIBS nel mio progetto. Per qualche motivo ho bisogno di farlo sul mio sistema Qt/MinGW/Windows. Sul mio desktop: Qt/VC++/Windows Non devo farlo. Qualcuno ha una spiegazione per questo?

Per chiunque imbattersi lo stesso problema:

  1. Scarica sorgente (.zip) da GLEW homepage
  2. compilare il sorgente, ci sono diversi modi (link cfr nella domanda iniziale)
    -> vedi in basso (il vecchio file batch non è più attivo su github)
  3. Inserire i file .dll.a in una directory che farà parte del percorso LIBS in qmake
  4. Inserire il file.i file DLL in una directory che è parte del percorso systemvariable
  5. Non dimenticare di collegamento con opengl, glu, Glew nel qmake file di progetto

Ecco un frammento del mio file di progetto:

#Required Libraries, replace with your path 
# $$quote(...) for quoting pathes with spaces 

LIBS += -L$$quote(C:/Programming/freeglut/lib/) -lfreeglut 
LIBS += -L$$quote(C:/Programming/glew-1.7.0/lib/) -lglew32 -lglew32mx 
# the following line is not necessary when working with VS compiler, odd 
LIBS += -lopengl32 -lglu32 

#includepath for project and the required libraries 
INCLUDEPATH += ./include 
INCLUDEPATH += "C:/Programming/glew-1.7.0/include" 
INCLUDEPATH += "C:/Programming/freeglut/include" 

Comunque grazie mille, forse questo aiuta alcune persone a non dimenticare le dipendenze :)

Cheers, Moritz


Edit: Il file batch non è all'altezza più e ho dovuto compilare Glew 1.9.0. Quindi ecco alcune ulteriori note:

  1. Assicurarsi che ar.exe e gcc.exe siano sul percorso. Per "Installazione standard QtSDK" è possibile trovare questi programmi in C: \ QtSDK \ mingw \ bin;
  2. Inserire le seguenti righe in un file batch nella cartella glew-1.x.y. Questa è una versione condensata di LightningIsMyName's Answer

    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 
    
  3. eseguire il file batch. I risultati saranno nella cartella lib /. I file .dll e .dll.a risultanti vanno insieme (.dll.a è ciò che vuoi dire al tuo linker, .dll dovrebbe essere disponibile per il sistema in fase di runtime). I file .a sono per il collegamento statico.

+1

Grazie per il suggerimento, ho elaborato la risposta e l'ho accettata. –

+0

Ho modificato la risposta per rimuovere un collegamento interrotto e sostituire le informazioni perse. Speriamo che non sia troppo ingombrante ora. –