how - opengl compiler
Compilando la aplicación GLEW mÃnima bajo Cygwin (4)
Parece que desea establecer un vínculo con las bibliotecas nativas Win32 en lugar de X11. Agregue -L / lib / w32api . De lo contrario, debe vincularse con las bibliotecas X11 ( -L / usr / X11R6 / lib -lX11 -lXi -lXmu ) para deshacerse de los errores del enlazador glX *.
Consideremos el siguiente programa e intentemos compilarlo bajo Cygwin:
#include <GL/glut.h>
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glLoadIdentity();
}
Se compila y funciona bien. -I/usr/include/opengl
parece ser terriblemente importante.
g++ -I/usr/include/opengl -I../include/cygwin -L../lib/cygwin test.cpp -o test.exe -lglut32 -lglu32 -lglew32 -lopengl32
Ahora,
#include <GL/glew.h> // from newest NVIDIA SDK
#include <GL/glut.h>
int main(int argc, char** argv)
{
glewInit();
glutInit(&argc, argv);
glLoadIdentity();
}
compilado por
g++ -I/usr/include/opengl -I../include/cygwin -L../lib/cygwin test.cpp -o test.exe -lglut32 -lglu32 -lglew32 -lopengl32
falla ¿Cómo construir la segunda aplicación?
primero
Hay varias formas de crear glew desde NVIDIA SDK: por VS, por cygwin, por cygwin con -D_WIN32. También probé la construcción de cygwin de glew original de la fuente.
VS build da
/cygdrive/c/DOCUME~1/kelebron/LOCALS~1/Temp/ccErbecl.o:test.cpp:(.text+0xa8): undefined reference to `_glLoadIdentity''
collect2: ld returned 1 exit status
las compilaciones de cygwin dan muchos
../lib/cygwin/glew32.lib(glew.o):glew.c:(.text+0x38e): undefined reference to `_glXGetProcAddress''
y cygwin con -D_WIN32 no compila en absoluto (estaba algo motivado por esta publicación ).
Segundo
Parece que hay dos formas de vincularse con OpenGL
con -L / lib / w32api
o con -L / usr / X11R6 / lib -lX11 -lXi -lXmu
Pero, las directivas -L no cambian nada. Tengo /usr/lib/w32api/libopengl32.a, pero puede que falte la versión X11 (/ usr / X11R6 / lib / libGL?). ¿Qué paquete debería incluir en Cygwin? He instalado todo comenzando con libGL (no solo ...).
Hace un tiempo tuve un problema similar, y descubrí que hay dos formas de compilar el código OpenGL bajo Cygwin.
Los primeros enlaces contra las bibliotecas win32api nativas glut32 glu32 opengl32 (también glui). Esos son algo mayores:
glut v3.7.6
opengl v1.1
glui 2.11
La segunda forma usa las bibliotecas X11 glut glu gl. Tienen un número de versión más nuevo en sus archivos de cabecera (Tenga en cuenta que para usar extensiones GL se requiere> v1.2):
glut v4 (freeglut)
opengl v1.3
glext
...
Entonces, para usar la primera opción comile con: -I / usr / include / opengl
y enlace contra: -lglut32 -lGLU32 -lOpenGL32
Para usar la versión X11, compile con: -I / usr / include / (que está incluido por defecto)
y enlace con: -lglut -lGLU -lGL ( fíjate en la diferencia)
podrías agregar los encabezados y librerías X11 pero supongo que los incluirán los GL.
-I / usr / X11R6 / include
-L / usr / X11R6 / lib -lXmu -lXi -lXext -lX11
En el instalador de Cygwin, los siguientes paquetes son sus opciones:
opengl - da la versión win32 de opengl, glut, glui
libglut-devel - Versión X11 de Glut (freeglut), esto también elegirá todos los paquetes dependientes. (glproto, libGL libGLU, libX11, ...)
También recomiendo incluir el servidor Xorg ya que necesitará un servidor X.
Espero que esto ayude.
¿Alguna sugerencia anterior funcionó para usted?
No estoy seguro de si tiene problemas para vincular o compilar GLEW. Uso GLEW a través de la fuente incluida y he utilizado enlaces en pasado.
Si desea compilar GLEW, asegúrese de seleccionar el código postal correcto, ya que el uso de scripts de código * nix puede no ejecutarse correctamente en Windows (no estoy seguro de Cygwin).
GLEW debe ser el primero en encabezado y orden de enlace.
Solo para asegurarnos de que estamos hablando de los mismos problemas, aquí está el mensaje que solía recibir.
$ g ++ -o glew_test.exe glew_test.cpp -lglut32 -lglew32
c: / Users / Fredrik / Users / Fredrik / AppAppData / Local / Temp / ccgSNdfr.o:
glew_test.cpp :(. text + 0x1c): referencia indefinida a `__glutInitWithExit ''
c: / Users / Fredrik / AppData / Local / Temp / ccgSNdfr.o:
glew_test.cpp :(. text + 0x37): referencia indefinida a `__glutCreateWindowWithExit ''
c: / Users / Fredrik / AppData / Local / Temp / ccgSNdfr.o:
glew_test.cpp :(. text + 0x53): referencia no definida a `__glutCreateMenuWithExit ''
c: / Users / Fredrik / AppData / Local / Temp / ccgSNdfr.o:
glew_test.cpp :(. text + 0x9e): referencia indefinida a `glutInitDisplayMode ''
c: / Users / Fredrik / AppData / Local / Temp / ccgSNdfr.o:
glew_test.cpp :(. text + 0xb2): referencia indefinida a `glutInitWindowPosition ''
c: / Users / Fredrik / AppData / Local / Temp / ccgSNdfr.o:
glew_test.cpp :(. text + 0xc6): referencia indefinida a `glutInitWindowSize ''
collect2: ld devolvió 1 estado de salida
Las siguientes páginas me ayudaron con este problema.
- www.mingw.org/node/28
- glew.sourceforge.net/install.html
Básicamente, tuve que definir _STDCALL_SUPPORTED y _M_IX86 al comienzo del archivo e incluir windows.h antes de glew.h
Luego usé las banderas -lglut32 -lglew32
Si quieres probarlo, aquí está la fuente también:
#define _STDCALL_SUPPORTED
#define _M_IX86
#include <windows.h>
#include <GL/glew.h>
#include <GL/glut.h>
#include <cstdio>
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutCreateWindow("MM 2004-05");
glewInit();
if (glewIsSupported("GL_VERSION_2_0"))
printf("Ready for OpenGL 2.0/n");
else {
printf("OpenGL 2.0 not supported/n");
}
return 0;
}
Tenga en cuenta que la ventana, por alguna razón, es necesaria para la prueba OpenGL2.0.