Компиляция GCC содержит неопределенные ссылки, несмотря на ранее работающие ссылки на Ubuntu - PullRequest
10 голосов
/ 15 октября 2011

кажется, что я больше не могу скомпилировать свой код в GCC после обновления Ubuntu 11.10, несмотря на ссылки в библиотеках с -l.Компиляция с:

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

(две библиотеки, которые я пытаюсь связать и включающие в себя, - это перенасыщение и математика)

Все библиотеки и заголовочные файлы находятся там, где они должны быть (они никуда не делись с момента обновления), и я проверил все свои установки соответствующих пакетов.Кроме того, вот мои переменные окружения, и они, кажется, в следующем порядке:

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

C_INCLUDE_PATH = / usr / include

Я не думаю, что это проблема с кодом, так как я не могудля компиляции файлов, которые я успешно скомпилировал вчера.Но я все равно сошлюсь на всякий случай:

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

Сообщения об ошибках:

     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

Я, честно говоря, понятия не имею, почему gcc не может найти необходимые исходные файлы.Буду признателен за любую помощь, которую вы могли бы оказать, заранее спасибо.

РЕДАКТИРОВАТЬ:

Я использую freeglut Добавлены сообщения об ошибках

1 Ответ

24 голосов
/ 15 октября 2011

Я предполагаю, что ld (компоновщик) был изменен для работы немного по-другому.

Поместите ваши библиотеки после исходного файла

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

или apt-get install binutils-gold, очевидно, новый компоновщик gold по-прежнему будет обрабатывать зависимые разделяемые библиотеки, даже если они появляются первыми в командной строке.

...