Newsgroup: it.comp.os.linux.development
Titolo: problema con opengl

Salve, sono nuovo delle famigerate librerie ed ho un problema nella 
compilazione dei programmi.
Premesso che le demo nel package delle Mesa funzionano (ho provato, come 
scritto nel readme), quali opzioni devo dare al gcc??
Ho provato con la seguente linea (ho spacchettato le Mesa sotto 
/usr/local/src/):
# gcc -o lesson1 lesson1.c -I/usr/X11R6/include -L/usr/X11R6/lib 
-I/usr/local/src/Mesa-5.1/include/
ma mi da' questi errori:
/tmp/cc0IL8JK.o(.text+0xf): In function `InitGL':
: undefined reference to `glClearColor'
/tmp/cc0IL8JK.o(.text+0x21): In function `InitGL':
: undefined reference to `glClearDepth'
/tmp/cc0IL8JK.o(.text+0x31): In function `InitGL':
: undefined reference to `glDepthFunc'
/tmp/cc0IL8JK.o(.text+0x41): In function `InitGL':
: undefined reference to `glEnable'
/tmp/cc0IL8JK.o(.text+0x51): In function `InitGL':
: undefined reference to `glShadeModel'
/tmp/cc0IL8JK.o(.text+0x61): In function `InitGL':
: undefined reference to `glMatrixMode'
/tmp/cc0IL8JK.o(.text+0x69): In function `InitGL':
: undefined reference to `glLoadIdentity'
/tmp/cc0IL8JK.o(.text+0x95): In function `InitGL':
: undefined reference to `gluPerspective'
/tmp/cc0IL8JK.o(.text+0xa5): In function `InitGL':
: undefined reference to `glMatrixMode'
...etc
Il sorgente l'ho scaricato da uno dei tutorial di NeHe sulle openGL, ed 
e' questo (non penso ci siano errori):
//
// This code was created by Jeff Molofee '99 (ported to Linux/GLUT by 
Richard Campbell '99)
//
// If you've found this code useful, please let me know.
//
// Visit me at 
www.demonews.com/hosted/nehe
// (email Richard Campbell at 
ulm...@bellsouth.net
)
//
#include <GL/glut.h>    // Header File For The GLUT Library
#include <GL/gl.h>	// Header File For The OpenGL32 Library
#include <GL/glu.h>	// Header File For The GLu32 Library
#include <unistd.h>     // Header file for sleeping.
/* ascii code for the escape key */
#define ESCAPE 27
/* The number of our GLUT window */
int window;
/* A general OpenGL initialization function.  Sets all of the initial 
parameters. */
void InitGL(int Width, int Height)	        // We call this right after 
our OpenGL window is created.
{
   glClearColor(0.0f, 0.0f, 0.0f, 0.0f);		// This Will Clear The 
Background Color To Black
   glClearDepth(1.0);				// Enables Clearing Of The Depth Buffer
   glDepthFunc(GL_LESS);				// The Type Of Depth Test To Do
   glEnable(GL_DEPTH_TEST);			// Enables Depth Testing
   glShadeModel(GL_SMOOTH);			// Enables Smooth Color Shading
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();				// Reset The Projection Matrix
   gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);	// 
Calculate The Aspect Ratio Of The Window
   glMatrixMode(GL_MODELVIEW);
}
/* The function called when our window is resized (which shouldn't 
happen, because we're fullscreen) */
void ReSizeGLScene(int Width, int Height)
{
   if (Height==0)				// Prevent A Divide By Zero If The Window Is Too Small
     Height=1;
   glViewport(0, 0, Width, Height);		// Reset The Current Viewport And 
Perspective Transformation
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);
   glMatrixMode(GL_MODELVIEW);
}
/* The main drawing function. */
void DrawGLScene()
{
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);		// Clear The 
Screen And The Depth Buffer
   glLoadIdentity();				// Reset The View
   // since this is double buffered, swap the buffers to display what 
just got drawn.
   glutSwapBuffers();
}
/* The function called whenever a key is pressed. */
void keyPressed(unsigned char key, int x, int y)
{
     /* avoid thrashing this procedure */
     usleep(100);
     /* If escape is pressed, kill everything. */
     if (key == ESCAPE)
     {
	/* shut down our window */
	glutDestroyWindow(window);
 
	/* exit the program...normal termination. */
	exit(0);
     }
}
int main(int argc, char **argv)
{
   /* Initialize GLUT state - glut will take any command line arguments 
that pertain to it or
      X Windows - look at its documentation at 
http://reality.sgi.com/mjk/spec3/spec3.html
 */
   glutInit(&argc, argv);
   /* Select type of Display mode:
      Double buffer
      RGBA color
      Alpha components supported
      Depth buffer */
   glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH);
   /* get a 640 x 480 window */
   glutInitWindowSize(640, 480);
   /* the window starts at the upper left corner of the screen */
   glutInitWindowPosition(0, 0);
   /* Open a window */
   window = glutCreateWindow("Jeff Molofee's GL Code Tutorial ... NeHe 
'99");
   /* Register the function to do all our OpenGL drawing. */
   glutDisplayFunc(&DrawGLScene);
   /* Go fullscreen.  This is as soon as possible. */
   glutFullScreen();
   /* Even if there are no events, redraw our gl scene. */
   glutIdleFunc(&DrawGLScene);
   /* Register the function called when our window is resized. */
   glutReshapeFunc(&ReSizeGLScene);
   /* Register the function called when the keyboard is pressed. */
   glutKeyboardFunc(&keyPressed);
   /* Initialize our window. */
   InitGL(640, 480);
   /* Start Event Processing Engine */
   glutMainLoop();
   return 1;
}

> undefined reference to `glClearColor'
Non hai specificato di linkare la libreria libGL.so, aggiungi -lGL
Ti consiglio di leggerti le FAQ del gruppo ed imparare a creare i Makefile.
Alessandro.

 Ti consiglio di leggerti le FAQ del gruppo ed imparare a creare i Makefile.
I makefile li so fare, stavo solo facendo una prova di compilazione per 
capire che opzioni usare.
Grazie dell'intervento, ma questa linea:
# gcc -o lesson1 lesson1.c -I/usr/X11R6/include -L/usr/X11R6/lib 
-I/usr/local/src/Mesa-5.1/include/ -lGL
mi ritorna piu' o meno gli stessi errori di prima:
/tmp/ccEwLA0y.o(.text+0x95): In function `InitGL':
: undefined reference to `gluPerspective'
/tmp/ccEwLA0y.o(.text+0x110): In function `ReSizeGLScene':
: undefined reference to `gluPerspective'
/tmp/ccEwLA0y.o(.text+0x145): In function `DrawGLScene':
: undefined reference to `glutSwapBuffers'
/tmp/ccEwLA0y.o(.text+0x174): In function `keyPressed':
: undefined reference to `glutDestroyWindow'
/tmp/ccEwLA0y.o(.text+0x1a2): In function `main':
: undefined reference to `glutInit'
/tmp/ccEwLA0y.o(.text+0x1af): In function `main':
: undefined reference to `glutInitDisplayMode'
/tmp/ccEwLA0y.o(.text+0x1c4): In function `main':
: undefined reference to `glutInitWindowSize'
/tmp/ccEwLA0y.o(.text+0x1d3): In function `main':
: undefined reference to `glutInitWindowPosition'
/tmp/ccEwLA0y.o(.text+0x1e3): In function `main':
: undefined reference to `glutCreateWindow'
/tmp/ccEwLA0y.o(.text+0x1f8): In function `main':
: undefined reference to `glutDisplayFunc'
/tmp/ccEwLA0y.o(.text+0x200): In function `main':
: undefined reference to `glutFullScreen'
/tmp/ccEwLA0y.o(.text+0x20d): In function `main':
: undefined reference to `glutIdleFunc'
/tmp/ccEwLA0y.o(.text+0x21d): In function `main':
: undefined reference to `glutReshapeFunc'
/tmp/ccEwLA0y.o(.text+0x22d): In function `main':
: undefined reference to `glutKeyboardFunc'
/tmp/ccEwLA0y.o(.text+0x24a): In function `main':
: undefined reference to `glutMainLoop'
collect2: ld returned 1 exit status
Uffa...certo che un readme potevano anche metterlo nei doc di Mesa...
Grazie cmq!
caligari

> undefined reference to `gluPerspective'
Indovina un po': aggiungi -lGLU
Alessandro.