2012-01-15 27 views
8

Estaba tratando de usar el archivo glew32.lib para vincularlo en mi proyecto, que compilar el origen de Glew para obtener el archivo glew.a. Ahora, tengo estos errores de enlace en mi proyecto:Cómo usar 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 

Es bueno para resolver este problema, pero por la forma en que quiero preguntar ¿hay otros implementaions OpenGL extensiones de gl?

+1

Me temo que necesitarás encontrar bibliotecas compiladas con g ++ o compilarlas tú mismo. – Mat

+0

¿Qué compilador estás usando? ¿Qué sistema operativo? Creo que es solo una cuestión especificar al compilador dónde encontrar el archivo lib (o .so dependiendo del sistema del que estamos hablando). Uso GLEW desde hace más de un año en mi Linux Box y todo es muy directo. Por favor hagamelo saber. –

+0

MinGW (título de publicación) Windows 7 – itun

Respuesta

0

Puede probar GLee que esencialmente hace lo mismo que GLEW.

5

Me temo que no puedes usar glew.lib con g ++ (porque .lib es un formato propiedad de Microsoft). Estos errores que obtienes le faltan puntos de entrada de función, lo que significa que no compiló GLEW correctamente (las funciones requeridas no se exportan en su .so - necesita conocer más detalles para poder resolver este problema).

En cuanto a la otra parte de la pregunta, puede intentar GLEH. Todavía está en la fase de desarrollo y es posible que necesite algunos ajustes para que funcione para usted, pero lo hemos estado utilizando con bastante éxito en Linux, por lo que no debería ser tan malo.

2

(sé que esto es un poco tarde, pero pensé que podría resolver el problema de otra persona, así que) tuve un problema muy similar al compilar un programa que se vinculaba a GLEW dinámicamente. Resulta que me había pasado por alto el archivo libglew32.dll.a - (. Además de libglew32.a y glew32.dll que había copiado previamente a mi carpeta del proyecto) que también tenía que estar presente

+0

Tuve el mismo problema hace un momento, lo cual lo resolvió. Sospeché que era una solución, pero no estaba ansioso por un proceso de recompilación completo. De todos modos, descargue el código fuente, compile con mingw (4.8) make, y cópielo al igual que .exe lo hizo, solo para futuras referencias. –

0

nadie extraño ha dicho nada acerca de esto. De forma predeterminada en Windows, los encabezados GLEW usan declspec(dllimport) para todas las funciones externas, lo que invalida todos sus nombres. Esta es la razón por la que todos los nombres de los símbolos externos faltantes tienen _imp____ en la parte delantera.

Si desea utilizar una compilación estática de GLEW (mencionó algo sobre libglew.a), defina GLEW_STATIC durante la compilación de GLEW y durante la compilación de su aplicación. Esto desmantelará los nombres para enlaces estáticos.

Si desea vincular a una versión de biblioteca compartida de GLEW, asegúrese de compilar GLEW con GLEW_BUILD. No estoy seguro si esto es necesario con gcc pero si la biblioteca está construida con MSVC.

Además, la cadena de herramientas GNU es compatible con el formato .lib de Microsoft para vincular. source

Puede que le resulte más fácil simplemente compilar GLEW o incluso incluirlo en su proyecto. Es solo un archivo fuente y algunos encabezados. Para compilar la biblioteca manualmente, use algo en las líneas de gcc -shared -o libGLEW.dll -Wl,--out-implib=libGLEW.dll.a -O2 -DGLEW_BUILD glew.c. Para obtener la versión estática, use algo como gcc -c -O2 -DGLEW_STATIC glew.c en su lugar.