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:

Kopiuj
/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ś?

edytowany 1x, ostatnio: madmike
hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:9 dni
0

sudo apt-get install libgl-dev

Kopiuj
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 :/

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

?

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

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

?

bądź:

Kopiuj
sudo apt-get install libgl1-mesa-dev

?

Zainstalowałem:

Kopiuj
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

ZJ
-o jest opcją, którą ustawiasz nazwę pliku wyjściowego. Czy na pewno ma być nią -L/usr/X11/lib?
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 7 godzin
0

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


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
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):

Kopiuj
#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:

Kopiuj
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

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 7 godzin
0

GLUTa pewnie trzeba zainstalować osobno :]


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
ZJ
  • Rejestracja:około 14 lat
  • Ostatnio:około 12 lat
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?

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 7 godzin
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.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 2 godziny
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.

Wibowit
Pisząc w Javie może być jeszcze łatwiej.
Spine
A pisząc w Pythonie z użyciem pygame i pyopengl może być jeszcze łatwiej...
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;

Kopiuj
/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 :/

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 7 godzin
0

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


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
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 :/

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 2 godziny
0

-lglu

0
Kopiuj
g++ plik.cpp -lglu
/usr/bin/ld: cannot find -lglu
collect2: ld returned 1 exit status
Endrju
  • Rejestracja:około 22 lata
  • Ostatnio:ponad rok
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.


"(...) otherwise, the behavior is undefined".
0

Hmmm...

Kopiuj
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
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 7 godzin
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ć.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 2 godziny
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'

Kopiuj
”  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>”.
edytowany 7x, ostatnio: Azarien
Endrju
U mnie freeglut ma bibliotekę nazywającą się libglut a nie libfreeglut. Wydaje mi się, że wszędzie tak jest...
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ę:

Kopiuj
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 :)

PR
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 11 lat
  • Postów:12
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

edytowany 3x, ostatnio: flowCRANE
GO
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 8 lat
  • Postów:12
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.