Компиляция и запуск программы OpenGL (glut) в Ubuntu 10.10 - PullRequest
5 голосов
/ 13 марта 2011

Я написал этот код:

#include <stdio.h>
#include <stdlib.h>
#include <GL/glx.h>    
#include <GL/gl.h>
#include <GL/glut.h>


void init()
{
    glClearColor(1.0,1.0,1.0,0.0);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(0.0,200.0,0.0,150.0);
 }

 void lineSegment()
 {
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0.0,0.0,1.0);
        glBegin(GL_TRIANGLES);
            glVertex2i(40,120);
            glVertex2i(40,20);
            glVertex2i(80,20);
        glEnd();
    glFlush();
 }
 int main()
 {
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutInitWindowPosition(50,100);
    glutInitWindowSize(400,300);
    glutCreateWindow("An Example OpenGL....");
    init();
    glutDisplayFunc(lineSegment);
    glutMainLoop();
    return 0;
 }

и это моя ошибка.

funfullson@funfullson:~$ gcc gl.cpp 
/tmp/cchfRGT2.o: In function `init()':
gl.cpp:(.text+0x2a): undefined reference to `glClearColor'
gl.cpp:(.text+0x36): undefined reference to `glMatrixMode'
gl.cpp:(.text+0x5a): undefined reference to `gluOrtho2D'
/tmp/cchfRGT2.o: In function `lineSegment()':
gl.cpp:(.text+0x6e): undefined reference to `glClear'
gl.cpp:(.text+0x8d): undefined reference to `glColor3f'
gl.cpp:(.text+0x99): undefined reference to `glBegin'
gl.cpp:(.text+0xad): undefined reference to `glVertex2i'
gl.cpp:(.text+0xc1): undefined reference to `glVertex2i'
gl.cpp:(.text+0xd5): undefined reference to `glVertex2i'
gl.cpp:(.text+0xda): undefined reference to `glEnd'
gl.cpp:(.text+0xdf): undefined reference to `glFlush'
/tmp/cchfRGT2.o: In function `main':
gl.cpp:(.text+0xf6): undefined reference to `glutInitDisplayMode'
gl.cpp:(.text+0x10a): undefined reference to `glutInitWindowPosition'
gl.cpp:(.text+0x11e): undefined reference to `glutInitWindowSize'
gl.cpp:(.text+0x12a): undefined reference to `glutCreateWindow'
gl.cpp:(.text+0x13b): undefined reference to `glutDisplayFunc'
gl.cpp:(.text+0x140): undefined reference to `glutMainLoop'
/tmp/cchfRGT2.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

Я не знаю, что мне делать. Пожалуйста, научите меня, как это сделать.

Ответы [ 2 ]

13 голосов
/ 13 марта 2011

Во-первых, вы должны использовать g++ для компиляции кода C ++, а не gcc.

Затем, при сборке вашей программы вы должны ссылаться на библиотеки OpenGL:

$ g++ gl.cpp -o gl -lGL -lGLU -lglut

Приведенная выше командная строка создаст исполняемый файл с именем gl в текущем каталоге. Без -o полученный исполняемый файл называется a.out (на моей платформе), что, вероятно, не то, что вам нужно.

(Обратите внимание, что согласно комментарию шифра ниже, исходные файлы должны предшествовать опциям библиотеки, чтобы g++ их компилировал.)

8 голосов
/ 31 октября 2011

Вам нужно будет поместить файл перед любыми опциями -l, например, здесь:

g++ X.cpp -lX11 -lGL -lGLU -lglut -g -Wall -O2 -o X

Также убедитесь, что следующие пакеты уже присутствуют:

sudo apt-get install mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev

И убедитесь, что модуль glx загружен в Xorg

Section "Module"
    Load "glx"
EndSection

Удачи в программировании OpenGL!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...