Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GCC compile has undefined references despite previously functional linking Ubuntu

it seems I can no longer compile my code in GCC post Ubuntu 11.10 update, despite linking in the libraries with -l. Compiling with:

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

(The two libraries i'm trying to link and have as includes are glut and math)

All the libraries and header files are where they're supposed to be (they haven't gone anywhere since the update) and i've checked all my relevant package installations. In addition here are my environment variables and they seem to be in order:

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

C_INCLUDE_PATH=/usr/include

I don't think it's a problem with the code as i'm unable to compile files I successfully compiled yesterday. But i'll link it anyway just in case:

    #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;
    }

Error messages:

     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

I honestly have no clue why gcc can't find the required source files. Any help you could supply would be greatly appreciated, thanks in advance.

EDIT:

I'm using freeglut Added error messages

like image 585
user975391 Avatar asked Oct 14 '11 21:10

user975391


1 Answers

I'm guessing ld (the linker) has been changed to work a bit differently.

Put your libraries after the source file

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

Or apt-get install binutils-gold , apparently the new gold linker will still process dependent shared libraries even if they appear first on the command line.

like image 105
nos Avatar answered Oct 25 '22 01:10

nos