2012-05-10 16 views
7

Se ha preguntado bastante antes: ¿Cómo compilo la fuente GLEW 1.7.0 en Windows con MinGW? El objetivo es vincular dinámicamente contra la biblioteca desde un proyecto de C++.Construyendo GLEW 1.7.0 en Windows usando MinGW

Más información: Estoy trabajando con QtCreator, ergo use qmake para la construcción. Estoy en Windows 7. Por ahora he intentado/eché un vistazo a los siguientes enlaces.

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

Desafortunadamente todas las soluciones publicadas terminan en los siguientes mensajes de error para mí, cuando uso los resultados recopilados en mi projec t:

undefined reference to `[email protected]' 
debug/Ex04.o: In function `Z6initGLv': 
undefined reference to `[email protected]' 
undefined reference to `[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 

Estoy al final de cuentas con respecto a este problema. Revisé doble y triplemente la ruta de LIBS en qmake y la variable de la ruta de acceso de Windows para incluir el directorio donde vive el dll glew. También INCLUDEPATH de qmake debería estar bien. Aquí los caminos en el archivo .pro de todos modos:

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" 

Entonces, ¿hay alguien por ahí que podría dar a un conjunto infalible para obtener instrucciones sobre cómo obtener el GLEW 1.7.0 fuente compilado con MinGW?

Respuesta

12

Ok Lo solucioné.

Básicamente compilé GLEW correctamente, por lo que puedo ver. Olvidé agregar -lopengl32 -lglu32 a la ruta LIBS en mi proyecto. Por alguna razón, necesito hacer esto en mi sistema Qt/MinGW/Windows. En mi escritorio: Qt/VC++/Windows no tengo que hacer esto. ¿Alguien tiene una explicación para eso?

Para cualquiera que tropezarse con el mismo problema:

  1. Descargar fuente (.zip) desde GLEW homepage
  2. compilar el código fuente, hay diferentes maneras (cf. enlaces en cuestión inicial)
    -> ver abajo (el archivo por lotes viejo ya no está en github)
  3. Coloque los archivos .dll.a en un directorio que formará parte de su ruta LIBS en qmake
  4. Ponga el.archivos DLL en un directorio que es parte de la ruta systemvariable
  5. No se olvide de enlazar con OpenGL, glu, Glew del archivo de proyecto qmake

He aquí un fragmento de mi archivo de proyecto:

#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" 

de todas formas muchas gracias, tal vez esto ayuda a algunas personas a no olvidarse de las dependencias :)

Cheers, Moritz


Editar: El archivo por lotes no es hasta más y sólo tenía que compilar Glew 1.9.0. Aquí hay algunas notas adicionales:

  1. Asegúrese de que ar.exe y gcc.exe estén en su ruta de acceso. Para la "instalación estándar QtSDK" esos programas se pueden encontrar en C: \ QtSDK \ mingw \ bin;
  2. Coloque las siguientes líneas en un archivo por lotes en la carpeta glew-1.x.y. Esta es una versión condensada de 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. Ejecutar el archivo por lotes. Los resultados estarán en la carpeta lib /. Los archivos .dll y .dll.a resultantes van juntos (.dll.a es lo que desea decirle a su vinculador, .dll debe estar disponible para el sistema en tiempo de ejecución). Los archivos .a son para enlaces estáticos.

+1

Gracias por la pista, elaboré la respuesta y la acepté. –

+0

Edité la respuesta para eliminar un enlace roto y reemplazar la información perdida. Espero que no esté demasiado abarrotado ahora. –