2012-01-15 18 views
8

Stavo cercando di utilizzare il file glew32.lib per collegarmi al mio progetto, di quanto non sia possibile compilare da solo Glew source per ottenere il file glew.a. Ora, io ho questi errori di collegamento nel mio progetto:Come utilizzare GLEW con MinGW

g++ -o Chapter10(OpenCLTest).exe src\Chapter10(OpenCLTest).o -lopengl32 -lglew -lglut32 -lglu32 -lopencl 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x167): undefined reference to `_imp____glewBindBuffer' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x39a): undefined reference to `_imp__glewInit' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x3a7): undefined reference to `_imp__glewIsSupported' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x48a): undefined reference to `_imp____glewGenBuffers' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x495): undefined reference to `_imp____glewBindBuffer' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x4dd): undefined reference to `_imp____glewBufferData' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x50b): undefined reference to `_imp____glewGetBufferParameteriv' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x1d67): undefined reference to `_imp____glewBindBuffer' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x1d7f): undefined reference to `_imp____glewDeleteBuffers' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x1d95): undefined reference to `_imp____glewBindBuffer' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x1dad): undefined reference to `_imp____glewDeleteBuffers' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x2078): undefined reference to `_imp____glewBindBuffer' 
collect2: ld returned 1 exit status 

E 'bene per risolvere questo problema, ma dal modo in cui voglio chiedere ci sono altri implementaions OpenGL di estensioni GL?

+1

Ho paura che dovrai trovare le librerie compilate con g ++ o crearle tu stesso. – Mat

+0

Quale compilatore stai usando? Quale sistema operativo? Penso che sia solo questione di specificare al compilatore dove trovare il file lib (o .so a seconda del sistema di cui stiamo parlando). Uso GLEW da più di un anno sulla mia Linux Box e tutto è molto semplice. Per favore mi faccia sapere. –

+0

MinGW (post title) Windows 7 – itun

risposta

0

Si potrebbe provare GLee che essenzialmente fa la stessa cosa di GLEW.

5

Ho paura che non puoi usare glew.lib con g ++ (perché .lib è un formato proprietario di Microsoft). Questi errori mancano di punti di ingresso della funzione, il che significa che non hai compilato correttamente GLEW (le funzioni richieste non vengono esportate nel tuo .so - è necessario conoscere maggiori dettagli per poter risolvere questo problema).

Come per l'altra parte della domanda, è possibile provare GLEH. È ancora in fase di sviluppo e potrebbe aver bisogno di qualche ritocco per funzionare, ma lo stiamo usando abbastanza bene in Linux, quindi non dovrebbe essere troppo brutto.

2

(So che è un po 'tardi, ma ho pensato che potrebbe risolvere il problema di qualcun altro, quindi) Ho avuto un problema molto simile compilando un programma collegato a GLEW in modo dinamico. Si scopre che avevo trascurato il file libglew32.dll.a - (. In aggiunta a libglew32.a e glew32.dll che avevo precedentemente copiato la mia cartella di progetto), che doveva anche essere presenti

+0

Ho avuto lo stesso problema proprio ora, che lo ha risolto. Sospettavo che fosse una soluzione, ma non ero desideroso di un intero processo di ricompilazione. In ogni caso, scaricare l'origine, compilare con mingw (4.8) make e copiarlo nello stesso modo di .exe ha fatto il trucco - solo per il riferimento futuro. –

0

Strano nessuno ha detto nulla su questo. Per impostazione predefinita su Windows, le intestazioni GLEW utilizzano declspec(dllimport) per tutte le funzioni esterne, che maneggia tutti i loro nomi. Questo è il motivo per cui tutti i nomi dei simboli esterni mancanti hanno tutti _imp____ nella parte anteriore.

Se non si desidera utilizzare una build statica di GLEW (si è detto qualcosa su libglew.a), definire GLEW_STATIC durante la generazione di GLEW e durante la generazione dell'applicazione. Questo distrarrà i nomi per il collegamento statico.

Se si desidera collegare a una versione di libreria condivisa di GLEW, assicurarsi di creare GLEW con GLEW_BUILD. Non sono sicuro che sia necessario con gcc, ma lo è se la libreria è costruita con MSVC.

Inoltre, la toolchain GNU supporta effettivamente il formato Microsoft .lib per il collegamento. source

Potresti trovare più semplice compilare GLEW da solo o includerlo nel tuo progetto. È solo un file sorgente e alcune intestazioni. Per compilare la libreria manualmente, utilizzare qualcosa sulla falsariga di gcc -shared -o libGLEW.dll -Wl,--out-implib=libGLEW.dll.a -O2 -DGLEW_BUILD glew.c. Per ottenere la versione statica utilizzare qualcosa come gcc -c -O2 -DGLEW_STATIC glew.c invece.