2011-10-14 12 views
10

sembra che non riesca più a compilare il mio codice in GCC dopo l'aggiornamento di Ubuntu 11.10, nonostante il collegamento nelle librerie con -l. Compilazione con:La compilazione GCC ha riferimenti non definiti nonostante il collegamento funzionale in precedenza Ubuntu

gcc -lm -lGL -lGLU -lglut T1.c

(Le due librerie che sto cercando di collegare e avere come include sono sovrabbondanza e la matematica)

Tutte le librerie e i file di intestazione sono dove dovrebbero essere (non sono andati da nessuna parte dopo l'aggiornamento) e ho controllato tutte le mie installazioni di pacchetti rilevanti. Inoltre qui ci sono le mie variabili di ambiente e sembrano essere in ordine:

PERCORSO =/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

C_INCLUDE_PATH =/usr/include

io non credo che sia un problema con il codice come io sono in grado di compilare i file ho compilato con successo ieri. Ma io collegare lo stesso nel caso in cui:

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

    const int WIDTH=640; 
    const int HEIGHT=480; 
    const float NEAR_CLIP=0.1f; 
    const float FAR_CLIP=100.0f; 
    const double INC_ROTATE=5; 
    double rotate=0; 

    void rotateObject() { 
      rotate+=INC_ROTATE; 
    } 

    void update() { 
      //rotateObject(); 
    } 

    void drawAxes() { 
     double x = 1.5, y = 1.5, z = 1.5; 
     glLineWidth(4); 
     glBegin(GL_LINES); 
      glColor3d(1,0,0); 
      glVertex3d(0,0,0); 
      glVertex3d(x,0,0); 
      glColor3d(0,1,0); 
      glVertex3d(0,0,0); 
      glVertex3d(0,y,0); 
      glColor3d(0,0,1); 
      glVertex3d(0,0,0); 
      glVertex3d(0,0,z); 
     glEnd(); 
     glLineWidth(1); 
    } 

    void render() { 
      glClear(GL_COLOR_BUFFER_BIT); 
      glLoadIdentity(); 
      gluLookAt(1.2,1.0,2.5,0.0,0.0,0.0,0.0,1.0,0.0); 
      drawAxes(); 
      glColor3d(1,1,1); 
      glRotated(rotate,0,0,1); 
      glutWireCube(1); 
    } 

    void display() { 
      update(); 
      render(); 
    } 

    void reshape(int width, int height) { 
      float fAspect=0; 
      float fovy=(M_PI/3); 
      float top=tan(fovy*0.5)*NEAR_CLIP; 
      float bottom=top; 
      float left=fAspect*bottom; 
      float right=fAspect*top; 

      glViewport(0,0,width,height); 
      glMatrixMode(GL_PROJECTION); 
      glLoadIdentity(); 
      glFrustum(left,right,bottom,top,NEAR_CLIP, FAR_CLIP); 
      glMatrixMode(GL_MODELVIEW); 

    } 

    int main(int argc, char **argv) { 

      glClearColor(0,0,0,1); 
      glutInit(&argc, argv); 
      glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); 
     glutInitWindowPosition(100,100); 
     glutInitWindowSize(320,320); 
     glutCreateWindow("T1"); 

     glutDisplayFunc(display); 
     glutReshapeFunc(reshape); 
     glutIdleFunc(display); 

     glutMainLoop(); 

      return 1; 
    } 

messaggi di errore:

 T1.c:(.text+0x63): undefined reference to `glLineWidth' 
    T1.c:(.text+0x6d): undefined reference to `glBegin' 
    T1.c:(.text+0x82): undefined reference to `glColor3d' 
    T1.c:(.text+0x93): undefined reference to `glVertex3d' 
    T1.c:(.text+0xa5): undefined reference to `glVertex3d' 
    T1.c:(.text+0xba): undefined reference to `glColor3d' 
    T1.c:(.text+0xcb): undefined reference to `glVertex3d' 
    T1.c:(.text+0xe1): undefined reference to `glVertex3d' 
    T1.c:(.text+0xf6): undefined reference to `glColor3d' 
    T1.c:(.text+0x107): undefined reference to `glVertex3d' 
    T1.c:(.text+0x11d): undefined reference to `glVertex3d' 
    T1.c:(.text+0x122): undefined reference to `glEnd' 
    T1.c:(.text+0x12f): undefined reference to `glLineWidth' 
    /tmp/cc4VqRwQ.o: In function `render': 
    T1.c:(.text+0x143): undefined reference to `glClear' 
    T1.c:(.text+0x148): undefined reference to `glLoadIdentity' 
    T1.c:(.text+0x18a): undefined reference to `gluLookAt' 
    T1.c:(.text+0x1b1): undefined reference to `glColor3d' 
    T1.c:(.text+0x1ce): undefined reference to `glRotated' 
    T1.c:(.text+0x1db): undefined reference to `glutWireCube' 
    /tmp/cc4VqRwQ.o: In function `reshape': 
    T1.c:(.text+0x22e): undefined reference to `tan' 
    T1.c:(.text+0x28a): undefined reference to `glViewport' 
    T1.c:(.text+0x294): undefined reference to `glMatrixMode' 
    T1.c:(.text+0x299): undefined reference to `glLoadIdentity' 
    T1.c:(.text+0x2da): undefined reference to `glFrustum' 
    T1.c:(.text+0x2e4): undefined reference to `glMatrixMode' 
    /tmp/cc4VqRwQ.o: In function `main': 
    T1.c:(.text+0x30b): undefined reference to `glClearColor' 
    T1.c:(.text+0x31e): undefined reference to `glutInit' 
    T1.c:(.text+0x328): undefined reference to `glutInitDisplayMode' 
    T1.c:(.text+0x337): undefined reference to `glutInitWindowPosition' 
    T1.c:(.text+0x346): undefined reference to `glutInitWindowSize' 
    T1.c:(.text+0x350): undefined reference to `glutCreateWindow' 
    T1.c:(.text+0x35d): undefined reference to `glutDisplayFunc' 
    T1.c:(.text+0x367): undefined reference to `glutReshapeFunc' 
    T1.c:(.text+0x374): undefined reference to `glutIdleFunc' 
    T1.c:(.text+0x379): undefined reference to `glutMainLoop' 
    collect2: ld returned 1 exit status 

Onestamente ho idea perché gcc non riesce a trovare i file di origine necessari. Qualsiasi aiuto tu possa fornire sarebbe molto apprezzato, grazie in anticipo.

EDIT:

sto usando freeglut Aggiunto messaggi di errore

risposta

24

Sto indovinando ld (il linker) è stato modificato per funzionare un po 'diverso.

mettere il vostro librerie dopo il file di origine

gcc T1.c -lm -lGL -lGLU -lglut 

O apt-get install binutils-gold, a quanto pare il nuovo linker oro sarà ancora elaborare le librerie condivise dipendenti, anche se appaiono prima sulla riga di comando.

+0

E compila. È piuttosto sciocco, grazie mille – user975391

+1

Grazie, ho passato un giorno a cercare di capire perché il mio programma non si compila in 11.10! Puoi spiegare perché questo cambiamento è successo? – kristianp

+0

Grazie e grazie Google –

Problemi correlati