0

Работаю с Opengl, ubuntu 16.04. Хочу скомпилировать пример работы с шейдерами, но на этапе компиляции выдает ошибку:

g++ -std=c++11 lab7.cpp -lglfw -lGL -lglut -o lab7
/tmp/ccS6I7iu.o: In function `main':
lab7.cpp:(.text+0xee): undefined reference to `glewExperimental'
lab7.cpp:(.text+0xf4): undefined reference to `glewInit'

Возможно, я упустил какой-то флаг, подключающий нужную библиотеку, пробовал флаг -lglfw3, но выдает ошибку о не нахождении такого.

В lab7.cpp подключаю такие библиотеки:

#include <stdio.h>
#include <stdlib.h>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <glm/glm.hpp>
NEO
  • 57
  • а разве glew не должно линковаться как -lGLEW ? – Flowneee Aug 31 '17 at 12:18
  • Только это уже этап линковки, а не компиляции. Вероятно, Вам поможет комментарий от @Flowneee. – αλεχολυτ Aug 31 '17 at 12:20
  • Ознакомьтесь ещё с вопросом о undefined reference. – αλεχολυτ Aug 31 '17 at 12:27
  • @Flowneee спасибо, помогло. А есть где-то информация о том, для каких библиотек какие флаги требуется? – NEO Aug 31 '17 at 12:47
  • @NEO давайте я сейчас в ответ напишу, чтобы другим не пришлось искать ответ в комментариях. – Flowneee Aug 31 '17 at 12:49
  • @NEO обновил ответ, чтобы ответить и на вопрос из комментариев. – Flowneee Aug 31 '17 at 12:58

1 Answers1

3

Надо прилинковать библиотеку libGLEW (флаг gcc -lGLEW). В вашем случае команда будет выглядеть как-то так:

g++ -std=c++11 lab7.cpp -lglfw -lGL -lglut -lGLEW -o lab7

Собственно об этом факте можно прочитать в документации к GLEW: http://glew.sourceforge.net/install.html

PS

Как правило, какие флаги нужны для какой библиотеки, указано в документации к библиотеке. Ну или можно просто посмотреть как называется файл библиотеки и указать его имя без приставки lib и расширения, то есть для libGLEW.so будет интересовать часть GLEW, ну и так далее. Посмотрите тут, как работает опция -l.

Flowneee
  • 3,787