glewInit Segfault con GLEW 2.0
opengl segmentation-fault (1)
Intento escribir un programa simple que solo abre una ventana con GLEW 2.0 y GLFW 3, pero me encuentro con un segfault ...
Aquí está mi fuente:
#include <stdio.h>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
int main(int argc, char **argv) {
const int height = 100;
const int width = 100;
if (!glfwInit()) {
printf("Glfw failed to init/n");
return -1;
}
// 4x antialiasing
glfwWindowHint(GLFW_SAMPLES, 4);
// We want OpenGL 3.3
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
// We don''t want the old OpenGL
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
GLFWwindow* window;
window = glfwCreateWindow(width, height, "Tutorial 01", NULL, NULL);
if (window == NULL) {
printf("GLFW Failed to open a window. "
"Intel GPUs don''t support 3.3/n");
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
glewExperimental = 1;
if (glewInit() != GLEW_OK) {
printf("GLEW Failed to initialize./n");
return -1;
}
glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);
do {
glfwSwapBuffers(window);
glfwPollEvents();
} while( glfwGetKey(window, GLFW_KEY_ESCAPE ) != GLFW_PRESS &&
glfwWindowShouldClose(window) == 0 );
}
Compilo esto con
gcc test.c -g -lGLEW -lglfw -o test
Y recibe un segfault al ejecutar el programa. Usando gdb
, una traza inversa en segfault da
0 0x0000000000000000 in ?? ()
1 0x00007ffff7ba02a7 in glxewInit () from /usr/lib64/libGLEW.so.2.0
2 0x00007ffff7ba87a3 in glewInit () from /usr/lib64/libGLEW.so.2.0
3 0x0000555555554bd4 in main (argc=1, argv=0x7fffffffdf18) at test.c:39
Estoy en Ubuntu 17.04, e instalé glew / glfw con Ubuntus pacakge manager con
sudo apt-get install libglew2.0 libglew-dev libglfw3 libglfw3-dev
Estaba siguiendo este tutorial aquí . Si hace alguna diferencia, no tengo un administrador de escritorio o un compositor ejecutándose. Estoy usando i3wm. Sin embargo, la segfault todavía ocurre cuando se ejecuta junto con el compton compositor.
Por último, para poder proporcionar información adicional, el ldd
muestra las bibliotecas vinculadas de test
como
linux-vdso.so.1 => (0x00007ffc44ce9000)
libGLEW.so.2.0 => /usr/lib64/libGLEW.so.2.0 (0x00007f8e53dc9000)
libglfw.so.3 => /usr/lib/x86_64-linux-gnu/libglfw.so.3 (0x00007f8e53b86000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8e537bf000)
libGL.so.1 => /usr/lib/nvidia-375/libGL.so.1 (0x00007f8e5351b000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f8e53313000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8e53008000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8e52e04000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f8e52acb000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8e528ad000)
libXrandr.so.2 => /usr/lib/x86_64-linux-gnu/libXrandr.so.2 (0x00007f8e526a2000)
libXinerama.so.1 => /usr/lib/x86_64-linux-gnu/libXinerama.so.1 (0x00007f8e5249f000)
libXxf86vm.so.1 => /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007f8e52297000)
libXcursor.so.1 => /usr/lib/x86_64-linux-gnu/libXcursor.so.1 (0x00007f8e5208d000)
/lib64/ld-linux-x86-64.so.2 (0x000055e0ef28b000)
libGLX.so.0 => /usr/lib/nvidia-375/libGLX.so.0 (0x00007f8e51e5d000)
libGLdispatch.so.0 => /usr/lib/nvidia-375/libGLdispatch.so.0 (0x00007f8e51b8f000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f8e5196d000)
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f8e5175b000)
libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007f8e5154f000)
libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007f8e51349000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f8e51145000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f8e50f3f000)
Gracias por cualquier ayuda.
Hay un informe de error que dice que el perfil del núcleo estaba roto en GLEW hasta 2.0.0.
Por lo tanto, debe actualizar el GLEW. Si eso no funciona, cambie al perfil de compatibilidad reemplazando el indicador GLFW_OPENGL_COMPAT_PROFILE
con GLFW_OPENGL_COMPAT_PROFILE
.