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

#c #gcc #linker-errors

#c #gcc #ошибки компоновщика

Вопрос:

Я компилирую пример программы, которая использует 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'
  

и другие ошибки в той же строке.

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

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

Комментарии:

1. Это напрямую связано с вашим компилятором, а не с используемой вами библиотекой. Пожалуйста, удалите теги opengl и glut 🙂

2. Исправлены теги и заголовок. Пожалуйста, помните об этом в следующий раз, когда будете публиковать вопрос. Теги должны быть релевантны вашей проблеме , а не использоваться только потому, что ваша программа использует определенный API.

Ответ №1:

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

Комментарии:

1. черт возьми, вот и все, хотя сначала это не сработало, мне все еще приходилось добавлять ‘-lglut’ в командную строку, но теперь это работает как по волшебству. Большое спасибо!

Ответ №2:

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