title: C - GLFW window doesn't open on Debian
body: <p>I'm trying to get started with GLFW on Debian, I've tried compiling and running an example program but it refuses to run. With the help of a couple of printf statements I've found that when the program tries to open a GLFW window it fails, then exits - but I don't know why. Any help would be amazing.</p>
  
  <pre><code>#include &lt;stdlib.h&gt;    // For malloc() etc.
  #include &lt;stdio.h&gt;     // For printf(), fopen() etc.
  #include &lt;math.h&gt;      // For sin(), cos() etc.
  #include &lt;GL/glfw.h&gt;   // For GLFW, OpenGL and GLU
  
  
  //----------------------------------------------------------------------
  // Draw() - Main OpenGL drawing function that is called each frame
  //----------------------------------------------------------------------
  
  void Draw( void )
  {
      int    width, height;  // Window dimensions
      double t;              // Time (in seconds)
      int    k;              // Loop counter
  
      // Get current time
      t = glfwGetTime();
  
      // Get window size
      glfwGetWindowSize( &amp;width, &amp;height );
  
      // Make sure that height is non-zero to avoid division by zero
      height = height &lt; 1 ? 1 : height;
  
      // Set viewport
      glViewport( 0, 0, width, height );
  
      // Clear color and depht buffers
      glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
      glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  
      // Set up projection matrix
      glMatrixMode( GL_PROJECTION );    // Select projection matrix
      glLoadIdentity();                 // Start with an identity matrix
      gluPerspective(                   // Set perspective view
          65.0,                         // Field of view = 65 degrees
          (double)width/(double)height, // Window aspect (assumes square pixels)
          1.0,                          // Near Z clipping plane
          100.0                         // Far Z clippling plane
      );
  
      // Set up modelview matrix
      glMatrixMode( GL_MODELVIEW );     // Select modelview matrix
      glLoadIdentity();                 // Start with an identity matrix
      gluLookAt(                        // Set camera position and orientation
          0.0, 0.0, 10.0,               // Camera position (x,y,z)
          0.0, 0.0, 0.0,                // View point (x,y,z)
          0.0, 1.0, 0.0                 // Up-vector (x,y,z)
      );
  
  
  // **** Draw a circle of points ***
  
  // Save the current modelview matrix on the stack
  glPushMatrix();
  
  // Translate (move) the points to the upper left of the display
  glTranslatef( -4.0f, 3.0f, 0.0f );
  
  // Rotate the points about the z-axis and the x-axis
  glRotatef( 35.0f * (float)t, 0.0f, 0.0f, 1.0f );
  glRotatef( 60.0f * (float)t, 1.0f, 0.0f, 0.0f );
  
  // Now draw the points - we use a for-loop to build a circle
  glColor3f( 1.0f, 1.0f, 1.0f );
  glBegin( GL_POINTS );
  for( k = 0; k &lt; 20; k ++ )
  {
      glVertex3f( 2.0f * (float)cos( 0.31416 * (double)k ),
                  2.0f * (float)sin( 0.31416 * (double)k ),
                  0.0f );
  }
  glEnd();
  
  // Restore modelview matrix
  glPopMatrix();
  
  
  // **** Draw a circle of lines ***
  
  // Save the current modelview matrix on the stack
  glPushMatrix();
  
  // Translate (move) the lines to the upper right of the display
  glTranslatef( 4.0f, 3.0f, 0.0f );
  
  // Rotate the points about the z-axis and the x-axis
  glRotatef( 45.0f * (float)t, 0.0f, 0.0f, 1.0f );
  glRotatef( 55.0f * (float)t, 1.0f, 0.0f, 0.0f );
  
  // Now draw the lines - we use a for-loop to build a circle
  glBegin( GL_LINE_LOOP );
  for( k = 0; k &lt; 20; k ++ )
  {
      glColor3f( 1.0f, 0.05f * (float)k, 0.0f );
      glVertex3f( 2.0f * (float)cos( 0.31416 * (double)k ),
                  2.0f * (float)sin( 0.31416 * (double)k ),
                  0.0f );
  }
  glEnd();
  
  // Restore modelview matrix
  glPopMatrix();
  
  
  // **** Draw a disc using trinagles ***
  
  // Save the current modelview matrix on the stack
  glPushMatrix();
  
  // Translate (move) the triangles to the lower left of the display
  glTranslatef( -4.0f, -3.0f, 0.0f );
  
  // Rotate the triangles about the z-axis and the x-axis
  glRotatef( 25.0f * (float)t, 0.0f, 0.0f, 1.0f );
  glRotatef( 75.0f * (float)t, 1.0f, 0.0f, 0.0f );
  
  // Now draw the triangles - we use a for-loop to build a disc
  // Since we are building a triangle fan, we also specify a first
  // vertex for the centre point of the disc.
  glBegin( GL_TRIANGLE_FAN );
  glColor3f( 0.0f, 0.5f, 1.0f );
  glVertex3f( 0.0f, 0.0f, 0.0f );
  for( k = 0; k &lt; 21; k ++ )
  {
      glColor3f( 0.0f, 0.05f * (float)k, 1.0f );
      glVertex3f( 2.0f * (float)cos( 0.31416 * (double)k ),
                  2.0f * (float)sin( 0.31416 * (double)k ),
                  0.0f );
  }
  glEnd();
  
  // Restore modelview matrix
  glPopMatrix();
  
  
  // **** Draw a disc using a polygon ***
  
  // Save the current modelview matrix on the stack
  glPushMatrix();
  
  // Translate (move) the polygon to the lower right of the display
  glTranslatef( 4.0f, -3.0f, 0.0f );
  
  // Rotate the polygon about the z-axis and the x-axis
  glRotatef( 65.0f * (float)t, 0.0f, 0.0f, 1.0f );
  glRotatef( -35.0f * (float)t, 1.0f, 0.0f, 0.0f );
  
  // Now draw the polygon - we use a for-loop to build a disc
  glBegin( GL_POLYGON );
  for( k = 0; k &lt; 20; k ++ )
  {
      glColor3f( 1.0f, 0.0f, 0.05f * (float)k );
      glVertex3f( 2.0f * (float)cos( 0.31416 * (double)k ),
                  2.0f * (float)sin( 0.31416 * (double)k ),
                  0.0f );
  }
  glEnd();
  
  // Restore modelview matrix
  glPopMatrix();
  
  
  // **** Draw a single quad ***
  
  // Save the current modelview matrix on the stack
  glPushMatrix();
  
  // Rotate the quad about the y-axis
  glRotatef( 60.0f * (float)t, 0.0f, 1.0f, 0.0f );
  
  // Now draw the quad
  glBegin( GL_QUADS );
  glColor3f( 1.0f, 0.0f, 0.0f );
  glVertex3f( -1.5f, -1.5f, 0.0f );
  glColor3f( 1.0f, 1.0f, 0.0f );
  glVertex3f(  1.5f, -1.5f, 0.0f );
  glColor3f( 1.0f, 0.0f, 1.0f );
  glVertex3f(  1.5f,  1.5f, 0.0f );
  glColor3f( 0.0f, 0.0f, 1.0f );
  glVertex3f( -1.5f,  1.5f, 0.0f );
  glEnd();
  
  // Restore modelview matrix
  glPopMatrix();
  }
  
  
  //----------------------------------------------------------------------
  // main() - Program entry point
  //----------------------------------------------------------------------
  
  int main( int argc, char **argv )
  {
  int    ok;             // Flag telling if the window was opened
  int    running;        // Flag telling if the program is running
  
  // Initialize GLFW
  glfwInit();
  // Open window
  ok = glfwOpenWindow(
      100, 100,          // Width and height of window
      8, 8, 8,           // Number of red, green, and blue bits for color buffer
      8,                 // Number of bits for alpha buffer
      24,                // Number of bits for depth buffer (Z-buffer)
      0,                 // Number of bits for stencil buffer
      GLFW_WINDOW        // We want a desktop window (could be GLFW_FULLSCREEN)
  );
  
          printf("here");
  // If we could not open a window, exit now
  if( !ok )
  {
      glfwTerminate();
      return 0;
  }
  printf("not here");
  
  
  // Set window title
  glfwSetWindowTitle( "My OpenGL program" );
  
  // Enable sticky keys
  glfwEnable( GLFW_STICKY_KEYS );
  
  // Main rendering loop
  do
  {
      // Call our rendering function
      Draw();
  
      // Swap front and back buffers (we use a double buffered display)
      glfwSwapBuffers();
  
      // Check if the escape key was pressed, or if the window was closed
      running = !glfwGetKey( GLFW_KEY_ESC ) &amp;&amp;
                glfwGetWindowParam( GLFW_OPENED );
  }
  while( running );
  
  // Terminate GLFW
  glfwTerminate();
  
  // Exit program
  return 0;
  }
  </code></pre>