OpenGL C++ na Ubuntu

0

Zainstalowałem sobie Code::Blocks, aby móc pisać w OpenGL. Stworzyłem nowy projekt (OpenGL Project), pojawił się plik z przykładowym kodem, ale kiedy chciałem skompilować, wyskoczyły błędy:

/home/moja_nazwa/openGL/ss/main.c|8|fatal error: GL/glx.h: Nie ma takiego pliku ani katalogu|
||=== Build finished: 1 errors, 0 warnings ===|

Czytałem już duuuużo tutoriali, ale nie wiem, co mogę w sumie zrobić. Pomoże ktoś?

0

sudo apt-get install libgl-dev

Czytanie list pakietów... Gotowe
Budowanie drzewa zależności       
Odczyt informacji o stanie... Gotowe
Pakiet libgl-dev jest pakietem wirtualnym zapewnianym przez:
  libgl1-mesa-swx11-dev 7.9~git20100924-0ubuntu2
  libgl1-mesa-dev 7.9~git20100924-0ubuntu2
Należy jednoznacznie wybrać jeden z nich do instalacji.

E: Package 'libgl-dev' has no installation candidate

Czyli hm, jakby nic to nie dało :/

sudo apt-get install libgl1-mesa-swx11 7.9~git20100924-0ubuntu2

?

Sorry, to wyżej do usunięcia. Czy poprawnie będzie tak:

sudo apt-get install libgl1-mesa-swx11-dev

?

bądź:

sudo apt-get install libgl1-mesa-dev

?

Zainstalowałem:

sudo apt-get install libgl1-mesa-dev

tworzę nowy projekt OpenGL, kompiluję, pojawia się inf. że projekt nie zbudowany, buduję go więc, (chociaż był zbudowany) i nie pojawia się żadne okienko, nic, ale błędu tez niby nie ma.

0

W katalogu z projektem wydaję polecenie: gcc -o -L/usr/X11/lib main main.c -lGL -lX11 dostaję: gcc: main: Nie ma takiego pliku ani katalogu

0

A czemu masz "main main.c", a nie samo "main.c"?

0

Słuchajcie ... Więc tak - nie wiem, co zrobiłem, ale działa ;)

1.Zainstalowałem Code::Blocks z Centrum Oprogramowania Ubuntu
2.Zainstalowałem za pomocą polecenia: sudo apt-get install libgl1-mesa-dev

w Code::Blocks stworzyłem nowy projekt OpenGL, wcisnąłem F9 i przykładowy kod działa. Mam jednak plik (kod znaleziony w sieci):

#include <GL/glut.h>


#define window_width  640
#define window_height 480

// Main loop
void main_loop_function()
{
   // Z angle
   static float angle;
   // Clear color (screen) 
   // And depth (used internally to block obstructed objects)
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   // Load identity matrix
   glLoadIdentity();
   // Multiply in translation matrix
   glTranslatef(0,0, -10);
   // Multiply in rotation matrix
   glRotatef(angle, 0, 0, 1);
   // Render colored quad
   glBegin(GL_QUADS);
   glColor3ub(255, 000, 000); glVertex2f(-1,  1);
   glColor3ub(000, 255, 000); glVertex2f( 1,  1);
   glColor3ub(000, 000, 255); glVertex2f( 1, -1);
   glColor3ub(255, 255, 000); glVertex2f(-1, -1);
   glEnd();
   // Swap buffers (color buffers, makes previous render visible)
	glutSwapBuffers();
   // Increase angle to rotate
   angle+=0.25;
}

// Initialze OpenGL perspective matrix
void GL_Setup(int width, int height)
{

	glViewport( 0, 0, width, height );
	glMatrixMode( GL_PROJECTION );
	glEnable( GL_DEPTH_TEST );
	gluPerspective( 45, (float)width/height, .1, 100 );
	glMatrixMode( GL_MODELVIEW );
}


// Initialize GLUT and start main loop
int main(int argc, char** argv) {
	glutInit(&argc, argv);

	glutInitWindowSize(window_width, window_height);

	glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);

	glutCreateWindow("GLUT Example!!!");

	glutIdleFunc(main_loop_function);

	GL_Setup(window_width, window_height);
   glutMainLoop();

}

Jednak po wydaniu polecenia w konsoli:

sth.cpp:1: fatal error: GL/glut.h: Nie ma takiego pliku ani katalogu
compilation terminated.

Powyższy kod kompilowałem za pomocą polecenia: g++ sth.cpp -lglut

0

GLUTa pewnie trzeba zainstalować osobno :]

0

Na ubuntu masz taki programik synaptic. Jest to ogólnie nakładka na apt-get, taki okienkowy aptitude. Jeżeli kompilator nie może znaleźć jakieś biblioteki, to wpisz w synapticu nazwę tej biblioteki i ściągnij coś, co najprawdopodobniej będzie wyglądało tak: libnazwa-dev. Zajmuje to mniej czasu niż pytanie po forach.

0

Nie jestem autorem tematu, ale chętnie się podepnę. Czym rózni się OpenGL od GLUTa? Bo nie mogę wyłapać róznicy. I to jest biblioteka, i to, czy jak?

0

Korzystanie z GLUT jest absolutnie niepotrzebne, aby uzyskać pełnię możliwości OpenGLa. GLUT oznacza OpenGL Utility Toolkit, zawiera trochę pomocniczych funkcji będących wrapperami na OpenGLowe funkcje plus bindingi do systemowych API wyświetlania okienek czy grafiki. Spokojnie możesz się obejść bez tych pomocniczych funkcji (np możesz napisać własne funkcje do generowania kwadryk), a bindingi zależą najmocniej od docelowych platform i używanego języka - OpenGL to nie tylko C/C++ Win/Lin/Mac, ale dziesiątki innych języków i platform. GLUT jest co najwyżej dobry do zabawy na początek, ale potem lepiej przerzucić się na coś nowocześniejszego. Używanie natywnego GLUTa z pod języków zarządzanych też ma niewielki sens (problemy z przenośnością i kompatybilnością), dlatego np Javowe LWJGL czy JogAmp implementują funkcjonalność GLUTopodobną w czystej Javie.

0

Korzystanie z GLUT jest absolutnie niepotrzebne, aby uzyskać pełnię możliwości OpenGLa.

GLUT to najprostszy sposób na uzyskanie PRZENOŚNEGO programu w OpenGL-u.

0

Słuchajcie .. kompilowałem i zrobiłem wszystko, wg tego poradnika, który znalazłem w sieci (jako załącznik), ale dla kodu, który umieściłem powyżej, kompilując, otrzymuję taki błąd;

/tmp/ccU8YBFs.o: In function `GL_Setup(int, int)':
glut_file.cpp:(.text+0x1bc): undefined reference to `gluPerspective'
collect2: ld returned 1 exit status

I teraz: błąd jest w kodzie, czy ten poradnik jest do d*** i coś źle poinstalowałem? Oczywiście zamiast <GL/glut.h> dałem <GL/freeglut.h> ale to jedyna różnica w kodzie ...

0

Oczywiście robię to, bo okazało sie, że jednak musimy uzywać GLUTa :/

0

Błąd jest na etapie łączenia (linkowania), a więc pewnie zapomniałeś podać jakiegoś parametru do linkera.

0

Hm, nie bardzo wiem, jakiego ... właściwie to są moje początki z openGL nie umiem kompletnie nic :( a tu nawet nie mam jak zaczac nauki, bo narzedzia odmawiaja posluszenstwa :/

0

-lglu

0
g++ plik.cpp -lglu
/usr/bin/ld: cannot find -lglu
collect2: ld returned 1 exit status
0

Polecam poczytać Ci coś o bibliotekach współdzielonych na Linuksie.

Ponieważ:

/usr/lib64/libglut.so.3.9.0

To:

-lglut

"Przez przypadek" biblioteka nazywa się libglut a flaga jest -lglut.

0

Hmmm...

nazwa@komputer:~/Pulpit$ g++ plik.cpp -lglut
/tmp/ccU8YBFs.o: In function `GL_Setup(int, int)':
glut_file.cpp:(.text+0x1bc): undefined reference to `gluPerspective'
collect2: ld returned 1 exit status
0

A tej flagi -lcośtam nie daje się przypadkiem przed nazwą pliku?

Edit:
Może i nie :P Ale znalazłem makefile z wieloma dodatkami: https://visualization.hpc.mil/wiki/OpenGL_Program01_Makefile Można coś z tego wypróbować.

0

Generalnie są trzy biblioteki: OpenGL, GLU i GLUT. freeglut to klon oryginalnego GLUT-a. Jakie są ich konkretne nazwy i w jakiej kombinacji pod Ubuntu nie wiem, ale twój błąd „undefined reference to `gluPerspective'

”  sugeruje, że brakuje funkcji z biblioteki GLU.


> g++ plik.cpp -lglut

Tu widać że w ogóle nie wlinkowujesz OpenGL-a. spróbuj `-lgl`, albo `-lmesagl`, czy jakoś tak. Pod windowsem jest `-lopengl32`.

Poza tym wychodzi na to że inkludujesz freegluta a wlinkowujesz GLUT-a. To chyba też niedobrze. `-lfreeglut`.

EDIT: prawdopodobnie zadziała tak: `-lfreeglut -lGLU -lGL`

PS. jakby ktoś się zastanawiał skąd się biorą te gluty, to GL znaczy „<i>Graphics Library</i>”, GLU to „<i>GL Utility</i>” a GLUT to „<i>GL Utility Toolkit</i>”.
0

@Azarien: żadne z podanych przez Ciebie poleceń nie skutkuje. Już nie wiem, co mam poinstalować, żeby pisac w tym glucie nieszczęsnym pod Ubuntu :/ poradniki gdzieś tam niby są, ale tak mętnie wytłumaczone, że nawet jak robię coś, co tam pisze, to i tak wychodzi, że nie działa :(

1

Pomoc otrzymałem na forum Ubuntu. Jeśli ktoś by szukał rozwiązania:

Instaluję:

1.sudo apt-get install libgl1-mesa-dev
2.sudo apt-get install freeglut3
3.sudo apt-get install freeglut3-dev

mam glutowy plik glut_file.cpp, kompiluję:

g++ glut_file.cpp -lGL -lGLU -lglut

i u mnie już działa :)

0

Ja pod ubuntu robie tak:

sudo apt-get install binutils-gold
albo to (pamięc nie ta :P)

sudo apt-get install freeglut3 freeglut3-dev
można też synaptikiem to zrobic ,
sciagam synaptikiem codeblocks

potem w C:B tworzymy sobie pusty projekt
potem klikamy PPM w C:B w project managment (skrajne lewe) na projekcie i wybieramy build Options

w Build Options klikamy zakładkę linker settings i w polu other linker settings (to pole z prawej) wpisujemy -lGL -lglut

potem OK klikamy i odpalamy F9

dodanie znaczników <code> - fp

0

Witam , ja walczę z glutem na moim ubuntu i mam coraz to nowe problemy.

Proszę o pomoc tych co mieli podobne.

Wszystko poinstalowane a mam już problem w momencie tworzenia projektu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1