Jak zbudować i zainstalować GLFW 3 i używać go w projekcie Linux

GLFW3

Ostatniej nocy pracowałem do późna próbując zbudować Pakiety GLFW 3 dla Linuksa ze źródła. Proces ten zajął mi bardzo dużo czasu, około 3 godzin w sumie, częściowo dlatego, że nie znam CMake, a częściowo dlatego, że nie znam GLFW.

Mam nadzieję, że ten post uchroni was przed trudnościami, jakie miałem wczoraj! Pomyślałem, że powinienem zrobić krótką notatkę i oszczędzić Ci kilka godzin życia...

Dzięki "urraka", " b6 " i " niklas" na kanale IRC # glfw udało mi się uruchomić glfw w wersji 3.0.1.

Okazuje się, że nie jest to trywialny proces (na pewno nie dla mnie, nie jestem ekspertem), ponieważ w sieci nie ma zbyt wiele dokumentacji na temat glfw3, szczególnie na temat konfiguracji z CMake.

Poproszono mnie o podzielenie tego na sekcję pytań i odpowiedzi, więc zrobiłem to, a Części odpowiedzi są teraz poniżej.

Czy jesteś opiekunem GLFW, czy członkiem zespołu GLFW?

Jeśli jakiekolwiek z opiekunów glfw3 zobacz to, to moja wiadomość do nich jest, proszę dodać sekcję" Konfigurowanie GLFW3 na Windows, Mac OS X i Linux " na swojej stronie internetowej! Pisanie programów z GLFW jest dość łatwe, ponieważ dokumentacja online jest całkiem dobra, Szybkie skanowanie wszystkich dostępnych klas i modułów i będziesz gotowy do pracy. Przykład projektu testowego tutaj jest również bardzo dobry. Dwa główne problemy, które znalazłem, to: po pierwsze, jak skonfigurować GLFW3 w moim systemie, a po drugie, jak aby zbudować projekt GLFW3? Te dwie rzeczy być może nie są wystarczająco jasne dla nie-eksperta.

Edit

Krótko przyjrzałem się dzisiaj (Data: 2014-01-14) wygląda na to, że strona GLFW przeszła ciężkie zmiany od czasu ostatniego spojrzenia i jest teraz sekcja na kompilowanie GLFW i buliding programów z GLFW, które myślę, że są nowe.

Author: user3728501, 2013-07-21

6 answers

Krok 1: Instalacja GLFW 3 w systemie za pomocą CMAKE

Do tej instalacji używałem KUbuntu 13.04, 64bit.

Pierwszym krokiem jest pobranie najnowszej wersji (zakładając, że wersje w przyszłości będą działać w podobny sposób) z www.glfw.org, prawdopodobnie używając tego linku .

Następnym krokiem jest rozpakowanie archiwum i otwarcie terminala. cd do glfw-3.Katalog X. X i uruchom cmake -G "Unix Makefiles" możesz potrzebować podwyższonych uprawnień, a także musisz zainstalować najpierw zbuduj zależności . Aby to zrobić, spróbuj sudo apt-get build-dep glfw lub sudo apt-get build-dep glfw3 lub zrób to ręcznie , tak jak ja używając sudo apt-get install cmake xorg-dev libglu1-mesa-dev... Mogą istnieć inne wymagane biblioteki, takie jak biblioteki pthread... Najwyraźniej już je miałem. (Patrz opcje-l podane dla etapu łącznika g++, poniżej.)

Teraz możesz wpisać make, a następnie make install, co prawdopodobnie będzie wymagało najpierw sudo.

/ Align = "left" / co zostało zbudowane lub gdzie zostało umieszczone. (W /usr/include, na przykład.)

Krok 2: Utwórz program testowy i skompiluj

Następnym krokiem jest odpalenie Vima ("co?! vim?!"mówisz) lub preferowany przez Ciebie IDE / edytor tekstu... Nie użyłem Vima, użyłem Kate, ponieważ jestem na KUbuntu 13.04... W każdym razie, pobierz lub skopiuj program testowy z tutaj (na dole strony)i zapisz, Zakończ.

Teraz skompiluj używając g++ -std=c++11 -c main.cpp - Nie wiem czy C++11 jest wymagane ale I używałem nullptr, więc go potrzebowałem... Może być konieczne uaktualnienie gcc do wersji 4.7 lub nadchodzącej wersji 4.8... Informacje o tym tutaj .

Następnie napraw swoje błędy, jeśli wpisałeś program ręcznie lub starałeś się być "zbyt sprytny" i coś nie działało... Następnie połączyć go za pomocą tego potwora! g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi więc widzisz, w części "install build dependencies" możesz również sprawdzić, czy masz GL, GLU, X11 Xxf86vm (cokolwiek to jest) XRandR posix-thread i Xi (cokolwiek to jest) rozwój biblioteki zainstalowane również. Może zaktualizuj również sterowniki grafiki, myślę, że GLFW 3 może wymagać OpenGL w wersji 3 lub wyższej? Może ktoś to potwierdzi? Może być również konieczne dodanie opcji linkera -ldl -lXinerama -lXcursor, aby działał poprawnie, jeśli otrzymujesz niezdefiniowane odwołania do dlclose (kredyt na @user2255242).

I tak, naprawdę potrzebowałem tylu -ls!

Krok 3: jesteś skończony, miłego dnia!

Mam nadzieję, że ta informacja była poprawne i wszystko działało na Ciebie, i podobało ci się pisanie programu testowego GLFW. Mam również nadzieję, że ten przewodnik pomógł, lub pomoże, kilka osób w przyszłości, którzy zmagali się tak jak ja dzisiaj wczoraj!

Nawiasem mówiąc, wszystkie tagi to rzeczy, których szukałem na stackoverflow, szukając odpowiedzi, która nie istnieje. (Do teraz.) Mam nadzieję, że są tym, czego szukałeś, jeśli byłeś w podobnej sytuacji do mnie.

 106
Author: user3728501,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-13 12:22:38

Zauważ, że nie potrzebujesz tak wielu -ls, Jeśli zainstalujesz glfw za pomocą opcji BUILD_SHARED_LIBS. (Możesz włączyć tę opcję, uruchamiając najpierw ccmake).
W ten sposób sudo make install zainstaluje bibliotekę współdzieloną w /usr/local/lib/ligglfw.so. Następnie możesz skompilować przykładowy plik za pomocą prostego:

g++ main.cpp -L /usr/local/lib/ -lglfw

Nie zapomnij dodać /usr / local / lib / do ścieżki wyszukiwania bibliotek współdzielonych przed uruchomieniem programu. Można to zrobić za pomocą:

export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}

I możesz to umieścić w swoim~/.bashrc więc nie musisz wpisywać cały czas.

 16
Author: CastleDefender,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-06 22:47:29

Rozwiązałem to w ten sposób

Plik pkg-config opisuje wszystkie niezbędne znaczniki czasu kompilacji i łącza oraz zależności potrzebne do korzystania z biblioteki.

pkg-config --static --libs glfw3

Pokazuje mi, że

-L/usr/local/lib -lglfw3 -lrt -lXrandr -lXinerama -lXi -lXcursor -lGL -lm -ldl -lXrender -ldrm -lXdamage -lX11-xcb -lxcb-glx -lxcb-dri2 -lxcb-dri3 -lxcb-present -lxcb-sync -lxshmfence -lXxf86vm -lXfixes -lXext -lX11 -lpthread -lxcb -lXau -lXdmcp  

Nie wiem, czy wszystkie te libs są rzeczywiście potrzebne do kompilacji, ale dla mnie to działa...

 13
Author: Oleh Pomazan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-03 21:33:27

Ponieważ zaakceptowana odpowiedź nie pozwala na więcej edycji, podsumuję ją jednym poleceniem kopiuj-wklej (Zastąp 3.2.1 najnowszą wersją dostępną w pierwszym poleceniu):

version="3.2.1" && \
wget "https://github.com/glfw/glfw/releases/download/${version}/glfw-${version}.zip" && \
unzip glfw-${version}.zip && \
cd glfw-${version} && \
sudo apt-get install cmake xorg-dev libglu1-mesa-dev && \
sudo cmake -G "Unix Makefiles" && \
sudo make && \
sudo make install

Jeśli chcesz skompilować program użyj następujących poleceń:

g++ -std=c++11 -c main.cpp && \
g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinerama -lXcursor

Jeśli postępujesz zgodnie z learnopengl.com tutorial może być również konieczne skonfigurowanie GLAD. W takim przypadku kliknij na ten link

Http://glad.dav1d.de/#profile=core&specification=gl&api=gl%3D3.3&api=gles1%3Dnone&api=gles2%3Dnone&api=glsc2%3Dnone&language=c&loader=on

A następnie kliknij przycisk "Generuj" w prawym dolnym rogu strony i pobierz plik zip. Wyodrębnij go i skompiluj źródła za pomocą następującego polecenia:

g++ glad/src/glad.c -c -Iglad/include

Teraz polecenia kompilacji programu stają się takie:

g++ -std=c++11 -c main.cpp -Iglad/include && \
g++ main.o glad.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinerama -lXcursor
 4
Author: 4dr14n31t0r Th3 G4m3r,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-27 15:46:49

Świetny przewodnik, dziękuję. Biorąc pod uwagę większość instrukcji tutaj, toprawie zbudowany dla mnie, ale miałem jeden pozostały błąd.

/usr/bin/ld: //usr/local/lib/libglfw3.a(glx_context.c.o): undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

Po wyszukaniu tego błędu musiałem dodać -ldl do wiersza poleceń.

g++ main.cpp -lglfw3 -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -lGL -lpthread -ldl

Następnie skompilowano i połączono przykładową aplikację "hello GLFW".

Jestem całkiem nowy w Linuksie, więc nie jestem do końca pewien, co dokładnie robi ta dodatkowa biblioteka... inne niż naprawić mój błąd łączenia. Widzę, że przełącznik linii cmd w poście powyżej, jednak.

 2
Author: user2941878,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-29 19:39:38

Jeśli ktoś robi się leniwy i może nie wie jak skonfigurować shell dla tych wszystkich bibliotek i - Ls, to stworzyłem skrypt Pythona (trzeba mieć python3, większość użytkowników Linuksa go ma.), który pozwala na łatwe kompilowanie skryptów i uruchamianie ich bez większego zmartwienia, po prostu ma regularne wywołania systemowe, po prostu porządnie ułożone, stworzyłem go dla siebie, ale może by się przydał: Tutaj jest

 0
Author: mathmaniage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 10:11:32