Помогите с OpenGL C++

Модератор: Модераторы разделов

Аватара пользователя
Aazmandius
Сообщения: 16
ОС: openSUSE 10.3, Fedora 7

Помогите с OpenGL C++

Сообщение Aazmandius »

Начал изучать OpenGL.
скачал либы
при попытке скомпилирывать простенький код из учебника выдает:
undefined reference to ко всем ГЛевским функциям


Код: Выделить всё

#include <GL/glut.h>

void init(void)
{
//Выбрать фоновый (очищающий) цвет
glClearColor(0.0,0.0,0.0,0.0);

//Установить проекцию
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0,1.0,0.0,1.0,-1.0,1.0);
}

void display(void)
{
//Очистить экран glClear(GL_COLOR_BUFFER_BIT);

//Нарисовать белый полигон (квадрат) с углами //в (0.25, 0.25, 0.0) и (0.75, 0.75, 0.0)
glColor3f(1.0,1.0,1.0);
glBegin(GL_POLYGON);
glVertex3f(0.25,0.25,0.0);
glVertex3f(0.75,0.25,0.0);
glVertex3f(0.75,0.75,0.0);
glVertex3f(0.25,0.75,0.0);
glEnd();

//Не ждем. Начинаем выполнять буферизованные
//команды OpenGL
glFlush();
}

//Установить начальные характеристики окна,
//открыть окно с заголовком «hello».
//Зарегистрировать дисплейную функцию обратного вызова
//Войти в главный цикл
int main(int argc, char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(250,250);
glutInitWindowPosition(100,100);
glutCreateWindow(“hello”);
init();
glutDisplayFunc(display);
glutMainLoop();

return 0;
}

код программы



Код: Выделить всё

 g++ 3.cpp
/tmp/ccBtatJg.o: In function `display()':
3.cpp:(.text+0x1d): undefined reference to `glColor3f'
3.cpp:(.text+0x27): undefined reference to `glBegin'
3.cpp:(.text+0x3f): undefined reference to `glVertex3f'
3.cpp:(.text+0x57): undefined reference to `glVertex3f'
3.cpp:(.text+0x6f): undefined reference to `glVertex3f'
3.cpp:(.text+0x87): undefined reference to `glVertex3f'
3.cpp:(.text+0x8c): undefined reference to `glEnd'
3.cpp:(.text+0x91): undefined reference to `glFlush'
/tmp/ccBtatJg.o: In function `init()':
3.cpp:(.text+0xad): undefined reference to `glClearColor'
3.cpp:(.text+0xb7): undefined reference to `glMatrixMode'
3.cpp:(.text+0xbc): undefined reference to `glLoadIdentity'
3.cpp:(.text+0xf4): undefined reference to `glOrtho'
/tmp/ccBtatJg.o: In function `main':
3.cpp:(.text+0x112): undefined reference to `glutInit'
3.cpp:(.text+0x11c): undefined reference to `glutInitDisplayMode'
3.cpp:(.text+0x12b): undefined reference to `glutInitWindowSize'
3.cpp:(.text+0x13a): undefined reference to `glutInitWindowPosition'
3.cpp:(.text+0x144): undefined reference to `glutCreateWindow'
3.cpp:(.text+0x153): undefined reference to `glutDisplayFunc'
3.cpp:(.text+0x158): undefined reference to `glutMainLoop'
collect2: выполнение ld завершилось с кодом возврата 1

вывод кампилятора

---- Задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно все ----
Спасибо сказали:
Аватара пользователя
Aectann
Бывший модератор
Сообщения: 3491
Статус: ...
ОС: OS X, GNU_и_не_только/Linux

Re: Помогите с OpenGL C++

Сообщение Aectann »

Нужно подключить используемые библиотеки (GL, glut):

g++ -lGL -lGLU 3.cpp
My god... it's full of stars!...
Спасибо сказали:
Аватара пользователя
Aazmandius
Сообщения: 16
ОС: openSUSE 10.3, Fedora 7

Re: Помогите с OpenGL C++

Сообщение Aazmandius »

Aectann писал(а):
29.01.2008 00:08
Нужно подключить используемые библиотеки (GL, glut):

g++ -lGL -lGLU 3.cpp

Спасибо за внимание и совет. Однако выходит:

Код: Выделить всё

g++ -lGL -lGLU 3.cpp
/tmp/ccKIw3yp.o: In function `main':
3.cpp:(.text+0x112): undefined reference to `glutInit'
3.cpp:(.text+0x11c): undefined reference to `glutInitDisplayMode'
3.cpp:(.text+0x12b): undefined reference to `glutInitWindowSize'
3.cpp:(.text+0x13a): undefined reference to `glutInitWindowPosition'
3.cpp:(.text+0x144): undefined reference to `glutCreateWindow'
3.cpp:(.text+0x153): undefined reference to `glutDisplayFunc'
3.cpp:(.text+0x158): undefined reference to `glutMainLoop'
collect2: выполнение ld завершилось с кодом возврата 1

с чего бы это?

---- Задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно все ----
Спасибо сказали:
Аватара пользователя
Aectann
Бывший модератор
Сообщения: 3491
Статус: ...
ОС: OS X, GNU_и_не_только/Linux

Re: Помогите с OpenGL C++

Сообщение Aectann »

А если так:

g++ -lGL -lglut 3.cpp ?
My god... it's full of stars!...
Спасибо сказали:
Аватара пользователя
Alxn1
Сообщения: 402
Статус: Красноглазик со стажем
ОС: Mavericks

Re: Помогите с OpenGL C++

Сообщение Alxn1 »

Ну, ещё glut нужно прилинковать: -lglut ;)
Спасибо сказали:
Аватара пользователя
Aazmandius
Сообщения: 16
ОС: openSUSE 10.3, Fedora 7

Re: Помогите с OpenGL C++

Сообщение Aazmandius »

Код: Выделить всё

g++ -lGL -lglut 3.cpp
/usr/bin/ld: cannot find -lglut
collect2: выполнение ld завершилось с кодом возврата 1

может и туплю но как это исправить?

---- Задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно все ----
Спасибо сказали:
Аватара пользователя
Aectann
Бывший модератор
Сообщения: 3491
Статус: ...
ОС: OS X, GNU_и_не_только/Linux

Re: Помогите с OpenGL C++

Сообщение Aectann »

может и туплю но как это исправить?

Установить библиотеку freeglut3(-dev).
My god... it's full of stars!...
Спасибо сказали:
Аватара пользователя
Folderx
Сообщения: 296
ОС: fedora, mandriva

Re: Помогите с OpenGL C++

Сообщение Folderx »

Установи библиотеку

Код: Выделить всё

 29 Втр 07:42 ~ >> urpmf libglut.so.3
libMesaglut3:/usr/X11R6/lib/libglut.so.3
libMesaglut3:/usr/X11R6/lib/libglut.so.3.7.1


попробуй пакет libMesaglut3, других у меня нет
Спасибо сказали:
Аватара пользователя
Shura
Сообщения: 1537
Статус: Оказывается и без KDE есть жизнь
ОС: FreeBSD 8.0-RC2

Re: Помогите с OpenGL C++

Сообщение Shura »

Или вообще не использовать glut
Rock'n'roll мертв © БГ
Спасибо сказали:
Vladymyt
Сообщения: 59
ОС: AltLinux 4.03

Re: Помогите с OpenGL C++

Сообщение Vladymyt »

Та же проблема
с установленным freeglut вместо libgnut

Код: Выделить всё

[vova@gfl-1158 GL]$ g++ -lGL -lGLU -lgnut gl1.cpp
gl1.cpp:1:21: error: GL/glut.h: Нет такого файла или каталога
gl1.cpp: In function ‘void MyDisplay()’:
gl1.cpp:11: ошибка: нет декларации ‘glutSwapBuffers’ в этой области видимости
gl1.cpp: In function ‘int main(int, char**)’:
gl1.cpp:15: ошибка: нет декларации ‘glutInit’ в этой области видимости
gl1.cpp:16: ошибка: нет декларации ‘glutInitWindowSize’ в этой области видимости
gl1.cpp:17: ошибка: нет декларации ‘glutInitWindowPosition’ в этой области видимости
gl1.cpp:19: ошибка: нет декларации ‘glutCreateWindow’ в этой области видимости
gl1.cpp:21: ошибка: нет декларации ‘GLUT_RGBA’ в этой области видимости
gl1.cpp:21: ошибка: нет декларации ‘GLUT_DOUBLE’ в этой области видимости
gl1.cpp:21: ошибка: нет декларации ‘GLUT_DEPTH’ в этой области видимости
gl1.cpp:21: ошибка: нет декларации ‘glutInitDisplayMode’ в этой области видимости
gl1.cpp:23: ошибка: нет декларации ‘glutDisplayFunc’ в этой области видимости
gl1.cpp:24: ошибка: нет декларации ‘glutIdleFunc’ в этой области видимости
gl1.cpp:26: ошибка: нет декларации ‘glutMainLoop’ в этой области видимости

с libgnut:

Код: Выделить всё

[vova@gfl-1158 GL]$ g++ -lGL -lGLU -lgnut gl1.cpp
/usr/bin/ld: cannot find -lgnut
collect2: выполнение ld завершилось с кодом возврата 1



Пример брал из учебника (http://ru-coding.com/ogl_1_1.php)
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Помогите с OpenGL C++

Сообщение v04bvs »

glut а не gnut
Спасибо сказали:
Vladymyt
Сообщения: 59
ОС: AltLinux 4.03

Re: Помогите с OpenGL C++

Сообщение Vladymyt »

v04bvs писал(а):
24.04.2008 19:04
glut а не gnut

Спасибо. Но проблема осталась. Независимо, что установлено: freeglut или libgnut (проверил)

Код: Выделить всё

[vova@gfl-1158 GL]$ g++ -lGL -lGLU -lglut gl1.cpp
/home/vova/tmp/cceRjz4q.o: In function `main':
gl1.cpp:(.text+0x1f): undefined reference to `glutInit'
gl1.cpp:(.text+0x34): undefined reference to `glutInitWindowSize'
gl1.cpp:(.text+0x43): undefined reference to `glutInitWindowPosition'
gl1.cpp:(.text+0x53): undefined reference to `glutCreateWindow'
gl1.cpp:(.text+0x60): undefined reference to `glutInitDisplayMode'
gl1.cpp:(.text+0x70): undefined reference to `glutDisplayFunc'
gl1.cpp:(.text+0x80): undefined reference to `glutIdleFunc'
gl1.cpp:(.text+0x88): undefined reference to `glutMainLoop'
/home/vova/tmp/cceRjz4q.o: In function `MyDisplay()':
gl1.cpp:(.text+0xa1): undefined reference to `glutSwapBuffers'
collect2: выполнение ld завершилось с кодом возврата 1
[vova@gfl-1158 GL]$


пс. неудобно, что не приходят уведомления
Спасибо сказали:
Аватара пользователя
S7a1k3r
Сообщения: 159
Статус: Белгородский LUG
ОС: Arch Linux

Re: Помогите с OpenGL C++

Сообщение S7a1k3r »

Vladymyt писал(а):
29.04.2008 23:06
v04bvs писал(а):
24.04.2008 19:04
glut а не gnut

Спасибо. Но проблема осталась. Независимо, что установлено: freeglut или libgnut (проверил)

Код: Выделить всё

[vova@gfl-1158 GL]$ g++ -lGL -lGLU -lglut gl1.cpp
/home/vova/tmp/cceRjz4q.o: In function `main':
gl1.cpp:(.text+0x1f): undefined reference to `glutInit'
gl1.cpp:(.text+0x34): undefined reference to `glutInitWindowSize'
gl1.cpp:(.text+0x43): undefined reference to `glutInitWindowPosition'
gl1.cpp:(.text+0x53): undefined reference to `glutCreateWindow'
gl1.cpp:(.text+0x60): undefined reference to `glutInitDisplayMode'
gl1.cpp:(.text+0x70): undefined reference to `glutDisplayFunc'
gl1.cpp:(.text+0x80): undefined reference to `glutIdleFunc'
gl1.cpp:(.text+0x88): undefined reference to `glutMainLoop'
/home/vova/tmp/cceRjz4q.o: In function `MyDisplay()':
gl1.cpp:(.text+0xa1): undefined reference to `glutSwapBuffers'
collect2: выполнение ld завершилось с кодом возврата 1
[vova@gfl-1158 GL]$


пс. неудобно, что не приходят уведомления


все собирается и безо всяких -lGL -lGLU

Код: Выделить всё

[stalker@stalker ~]$ g++ -lglut test.cpp
[stalker@stalker ~]$ ./a.out


только кавычки в 43 строке на правильные исправьте)
Спасибо сказали:
Vladymyt
Сообщения: 59
ОС: AltLinux 4.03

Re: Помогите с OpenGL C++

Сообщение Vladymyt »

что-то оно одинаково, что с -lGL -lGLU, что без. Наверное по кривому OpenGL в Алте4 собран.

[vova@main test]$ g++ -lglut gl1-test.cpp
/tmp/.private/vova/cc2MQCnQ.o: In function `display()':
gl1-test.cpp:(.text+0x1c): undefined reference to `glColor3f'
gl1-test.cpp:(.text+0x29): undefined reference to `glBegin'
gl1-test.cpp:(.text+0x46): undefined reference to `glVertex3f'
gl1-test.cpp:(.text+0x63): undefined reference to `glVertex3f'
gl1-test.cpp:(.text+0x80): undefined reference to `glVertex3f'
gl1-test.cpp:(.text+0x9d): undefined reference to `glVertex3f'
gl1-test.cpp:(.text+0xa5): undefined reference to `glEnd'
gl1-test.cpp:(.text+0xaa): undefined reference to `glFlush'
/tmp/.private/vova/cc2MQCnQ.o: In function `init()':
gl1-test.cpp:(.text+0xcf): undefined reference to `glClearColor'
gl1-test.cpp:(.text+0xdf): undefined reference to `glMatrixMode'
gl1-test.cpp:(.text+0xe7): undefined reference to `glLoadIdentity'
gl1-test.cpp:(.text+0x134): undefined reference to `glOrtho'
/tmp/.private/vova/cc2MQCnQ.o: In function `main':
gl1-test.cpp:(.text+0x157): undefined reference to `glutInit'
gl1-test.cpp:(.text+0x164): undefined reference to `glutInitDisplayMode'
gl1-test.cpp:(.text+0x179): undefined reference to `glutInitWindowSize'
gl1-test.cpp:(.text+0x188): undefined reference to `glutInitWindowPosition'
gl1-test.cpp:(.text+0x198): undefined reference to `glutCreateWindow'
gl1-test.cpp:(.text+0x1ad): undefined reference to `glutDisplayFunc'
gl1-test.cpp:(.text+0x1b5): undefined reference to `glutMainLoop'
collect2: выполнение ld завершилось с кодом возврата 1
Спасибо сказали:
Аватара пользователя
Corsair
Сообщения: 842
Статус: Местный "тролль"
ОС: Fedora

Re: Помогите с OpenGL C++

Сообщение Corsair »

Определенно компилятор не может найти библиотек. Они должны быть в /usr/lib:

Код: Выделить всё

[cjs@corsair ~]$ ls -l /usr/lib | grep libGL
lrwxrwxrwx  1 root root       16 Мар  5 19:28 libGLEW.so.1.4 -> libGLEW.so.1.4.0
-rwxr-xr-x  1 root root   216816 Янв 22 13:56 libGLEW.so.1.4.0
lrwxrwxrwx  1 root root       10 Мар  7 13:18 libGL.so -> libGL.so.1
lrwxrwxrwx  1 root root       12 Мар  7 13:12 libGL.so.1 -> libGL.so.1.2
-rwxr-xr-x  1 root root   445692 Янв 22 21:44 libGL.so.1.2
lrwxrwxrwx  1 root root       11 Мар  7 13:18 libGLU.so -> libGLU.so.1
lrwxrwxrwx  1 root root       20 Мар  7 13:12 libGLU.so.1 -> libGLU.so.1.3.070002
-rwxr-xr-x  1 root root   454428 Янв 22 21:44 libGLU.so.1.3.070002
Жестокий стоячий админ (с) коллега
Спасибо сказали:
Vladymyt
Сообщения: 59
ОС: AltLinux 4.03

Re: Помогите с OpenGL C++

Сообщение Vladymyt »

Они там и есть:

Код: Выделить всё

[vova@main ~]$ ls -l /usr/lib | grep libGL
lrwxrwxrwx   1 root root           39 Апр 19 19:21 libGLcore.so.1 -> ../../etc/X11/lib_nvidia/libGLcore.so.1
lrwxrwxrwx   1 root root           16 Авг 23  2007 libGLEW.so.1.3 -> libGLEW.so.1.3.6
-rw-r--r--   1 root root       212572 Май  2  2007 libGLEW.so.1.3.6
lrwxrwxrwx   1 root root           16 Авг 23  2007 libGLEW.so.1.4 -> libGLEW.so.1.4.0
-rw-r--r--   1 root root       212584 Май  2  2007 libGLEW.so.1.4.0
lrwxrwxrwx   1 root root           24 Апр 19 19:19 libGL.so -> X11/mesa_gl/libGL.so.1.2
lrwxrwxrwx   1 root root           28 Май  2 23:33 libGL.so.1 -> ../../etc/X11/lib/libGL.so.1
lrwxrwxrwx   1 root root           24 Апр 19 19:19 libGL.so.1.2 -> X11/mesa_gl/libGL.so.1.2
lrwxrwxrwx   1 root root           11 Апр 19 19:19 libGLU.so -> libGLU.so.1
lrwxrwxrwx   1 root root           20 Апр 19 19:19 libGLU.so.1 -> libGLU.so.1.3.070003
-rw-r--r--   1 root root       442004 Апр 11 21:40 libGLU.so.1.3.070003
Спасибо сказали:
Аватара пользователя
cy6erGn0m
Сообщения: 119
ОС: MandrivaLinux/Solaris 10

Re: Помогите с OpenGL C++

Сообщение cy6erGn0m »

Ничего подобного что просто так собирается. libglut она именно так и называется и она должна присутствовать именно как libglut.so/libglut.a
Ставьте официальную, читайте о ней на opengl.org:

http://www.opengl.org/resources/libraries/glut/


Собственно там и downloads есть.

у меня работает
g++ -lGL -lglut gl.c
и всё, запускается.

cy6ergn0m@d-espb04-126-197 ~ $ locate libglut.so
/usr/lib/libglut.so
/usr/lib/libglut.so.3
/usr/lib/libglut.so.3.7.1
cy6ergn0m@d-espb04-126-197 ~ $


Вот ещё вариант: у меня в системе есть пакеты
[root@d-espb04-126-197 cy6ergn0m]# urpmi glut
Нет пакета с именем glut
Следующие пакеты содержат glut:
libmesaglut3
libmesaglut3-devel
I want to Believe!

They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
Спасибо сказали:
Vladymyt
Сообщения: 59
ОС: AltLinux 4.03

Re: Помогите с OpenGL C++

Сообщение Vladymyt »

Код: Выделить всё

[root@gfl-1158 tmp]#  locate libglut.so
/usr/lib/libglut.so
/usr/lib/libglut.so.3
/usr/lib/libglut.so.3.7.1
[root@gfl-1158 tmp]# rpm --info libmesa
Name        : libmesa                      Relocations: (not relocateable)
Version     : 7.0.2                             Vendor: ALT Linux Team
Release     : alt1.M40.1                    Build Date: Пнд 26 Ноя 2007 17:09:36
Install date: Пнд 21 Апр 2008 18:32:18      Build Host: ldv.hasher.altlinux.org
Group       : Система/Библиотеки   Source RPM: Mesa-7.0.2-alt1.M40.1.src.rpm
Size        : 999417                           License: LGPL
Packager    : Valery Inozemtsev <shrek@altlinux.ru>
URL         : http://www.mesa3d.org
Summary     : OpenGL 1.3 compatible 3D graphics library for X Window server
Description :
Mesa is an OpenGL compatible 3D graphics library.
[root@gfl-1158 tmp]# rpm --info libmesa-devel
Name        : libmesa-devel                Relocations: (not relocateable)
Version     : 7.0.2                             Vendor: ALT Linux Team
Release     : alt1.M40.1                    Build Date: Пнд 26 Ноя 2007 17:09:36
Install date: Пнд 21 Апр 2008 20:26:17      Build Host: ldv.hasher.altlinux.org
Group       : Разработка/C        Source RPM: Mesa-7.0.2-alt1.M40.1.src.rpm
Size        : 733892                           License: LGPL
Packager    : Valery Inozemtsev <shrek@altlinux.ru>
URL         : http://www.mesa3d.org
Summary     : Development files for Mesa Library
Description :
libmesa-devel contains the libraries and header files needed to
develop programs which make use of libmesa.
[root@gfl-1158 tmp]#

Да, надо с сайта ставить, а то в дистре косо собрали...
Спасибо сказали: