Почему я получаю неопределенную ссылку (например, на `glColor3f') при компиляции программы на c?

Я компилирую пример программы, использующей opengl в ubuntu (linux). Краткий фрагмент кода выглядит следующим образом:

 #include <stdlib.h> 

 #include <GL/glut.h>


 void createBox( GLfloat centroX, GLfloat centroY,
                       GLfloat corR, GLfloat corG, GLfloat corB )
 {
    /* Cor  */

    glColor3f( corR, corG, corB );

Я установил все пакеты для разработки в opengl (в ubuntu), а именно:

freeglut3 freeglut3-dev libglew1.5 libglew1.5-dev libglu1-mesa
libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev

Я компилирую пример следующим образом:

gcc -lGL   CG_ex04.c -o main

и я получаю следующее

/tmp/ccDWmJDZ.o: In function `createBox':
CG_ex04.c:(.text+0x31): undefined reference to `glColor3f'

и другие ошибки в том же духе.

Кто-нибудь знает, что я делаю неправильно?

Заранее спасибо за любую помощь.


person dasen    schedule 14.11.2010    source источник
comment
Это связано с вашим компилятором, а не с библиотекой, которую вы используете. Пожалуйста, удалите теги opengl и Glut :-)   -  person    schedule 14.11.2010
comment
Исправлены теги и заголовок. Пожалуйста, помните об этом в следующий раз, когда будете задавать вопрос. Теги должны быть относящимися к вашей проблеме, а не использоваться только потому, что ваша программа использует определенный API.   -  person    schedule 17.11.2010


Ответы (2)


Попробуйте gcc -o main CG_ex4.c -lGL. Правильный порядок параметров gcc важен.

person bjoernz    schedule 14.11.2010
comment
черт возьми, это было так, хотя сначала это не сработало, мне все же пришлось добавить «-lglut» в командную строку, но теперь это работает как шарм. Большое спасибо! - person dasen; 14.11.2010

Попробуйте включить GL/gl.h, а также перенасыщение. Хотя это немного странно, так как перенасыщение на самом деле включает в себя как gl.h, так и glu.h.

person martiert    schedule 14.11.2010