2010-11-15 17 views
2

Je fais des expériences avec opengl in c pour linux. J'ai la fonction suivante qui dessinerait un cercle donné ces paramètres. J'ai inclusPourquoi cette petite fonction (dessiner un cercle en opengl) ne va-t-elle pas se compiler en c?

#include <stdlib.h> 
#include <math.h> 
#include <GL/gl.h> 
#include <GL/glut.h> 

Cependant, lorsque je compile:

gcc fiver.c -o fiver -lglut 

je reçois:

/usr/bin/ld: /tmp/ccGdx4hW.o: undefined reference to symbol '[email protected]@GLIBC_2.2.5' 
    /usr/bin/ld: note: '[email protected]@GLIBC_2.2.5' is defined in DSO /lib64/libm.so.6 so try 
    adding it to the linker command line 
    /lib64/libm.so.6: could not read symbols: Invalid operation 
    collect2: ld returned 1 exit status 

La fonction est la suivante:

void drawCircle (int xc, int yc, int rad) { 
// 
// draw a circle centered at (xc,yc) with radius rad 
// 
    glBegin(GL_LINE_LOOP); 
// 
    int angle; 
    for(angle = 0; angle < 365; angle = angle+5) { 
    double angle_radians = angle * (float)3.14159/(float)180; 
    float x = xc + rad * (float)cos(angle_radians); 
    float y = yc + rad * (float)sin(angle_radians); 
    glVertex3f(x,0,y); 
    } 

    glEnd(); 
} 

Est-ce que quelqu'un sait ce qui est faux?

+3

Il ne manque pas de compiler; il ne parvient pas à lier. –

+0

Hmm, avec le recul, cela semble être le vrai problème: '/lib64/libm.so.6: ne pouvait pas lire les symboles: Opération invalide' - mais je n'ai aucune idée de ce que le problème pourrait être là ... peut-être mésapparié 64/32 bibliothèques? – cdhowie

+0

Vous pouvez également regarder dans les astuces que vous pouvez utiliser lorsque vous dessinez un cercle. Les cercles ont beaucoup de symétrie, et vous pouvez l'utiliser pour réduire le nombre de fois que vous devez appeler les fonctions trigonométriques par un facteur de 3 pour les cercles orientés autour de (0,0) – nategoose

Répondre

17

L'éditeur de liens ne trouve pas la définition de la fonction sin(). Vous devez lier votre application à la bibliothèque de mathématiques. Compiler avec:

gcc fiver.c -o fiver -lglut -lm 
+0

c'était tout! Merci beaucoup! – dasen