GLFW3
Ostatniej nocy pracowałem do późna, próbując zbudować pakiety GLFW 3 dla Linuksa ze źródeł. Ten proces zajął mi bardzo dużo czasu, w sumie około 3 godzin, częściowo dlatego, że nie znam CMake, a częściowo dlatego, że nie znałem GLFW.
Mam nadzieję, że ten post uchroni Cię przed trudnością, którą miałem wczoraj! Pomyślałem, że powinienem napisać krótki opis i miejmy nadzieję, że zaoszczędzę ci kilku godzin twojego życia ...
Dzięki "urraka", "b6" i "niklas" na kanale IRC #glfw mogłem 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 wielu dokumentacji na temat glfw3, szczególnie na temat konfigurowania go za pomocą CMake.
Poproszono mnie o podzielenie tego na sekcję pytań i odpowiedzi, więc zrobiłem to, a części odpowiedzi znajdują się teraz poniżej.
Czy jesteś opiekunem GLFW lub członkiem zespołu GLFW?
Jeśli któryś z opiekunów GLFW3 zobaczy to, moja wiadomość do nich jest taka, aby dodać sekcję "konfigurowanie GLFW3 w systemie Windows, Mac OS X i Linux" do swojej witryny! Pisanie programów w 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ładem projektu badawczego opisywany tutaj jest również bardzo dobra. Dwa główne problemy, które znalazłem, to: po pierwsze, jak skonfigurować GLFW3 w moim systemie, a po drugie, jak zbudować projekt GLFW3? Te dwie rzeczy być może nie są wystarczająco jasne dla osoby niebędącej ekspertem.
Edytować
Rzuciłem dzisiaj krótkie spojrzenie (Data: 2014-01-14), wygląda na to, że strona GLFW przeszła duże zmiany od czasu, gdy ostatnio przeglądałem, i jest teraz sekcja o kompilowaniu GLFW i tworzeniu programów w GLFW, które moim zdaniem są nowe.
Odpowiedzi:
Krok 1: Instalacja GLFW 3 w systemie za pomocą CMAKE
W tej instalacji korzystałem z KUbuntu 13.04, 64-bitowego.
Pierwszym krokiem jest pobranie najnowszej wersji (zakładając, że wersje w przyszłości będą działać podobnie) ze strony www.glfw.org , prawdopodobnie korzystając z tego linku .
Następnym krokiem jest wyodrębnienie archiwum i otwarcie terminala.
cd
do katalogu glfw-3.XX i uruchomcmake -G "Unix Makefiles"
, możesz potrzebować podwyższonych uprawnień, a także może być konieczne wcześniejsze zainstalowanie zależności kompilacji . Aby to zrobić, spróbujsudo apt-get build-dep glfw
lubsudo apt-get build-dep glfw3
lub zrobić to ręcznie , jak ja za pomocąsudo apt-get install cmake xorg-dev libglu1-mesa-dev
... Mogą być też inne libs wymagany jest takie jak biblioteki pthread ... Widocznie miałem ich już. (Zobacz opcje -l podane dla etapu linkera g ++ poniżej.)Teraz możesz pisać,
make
a potemmake install
, co prawdopodobnie będzie wymagało od Ciebiesudo
pierwszego.Okay, powinieneś otrzymać szczegółowe dane wyjściowe z ostatnich trzech etapów CMake, informujące o tym, co zostało zbudowane lub gdzie zostało umieszczone. (Na
/usr/include
przykład.)Krok 2: Utwórz program testowy i skompiluj
Następnym krokiem jest odpalenie vima ("co ?! vim ?!" mówisz) lub twojego preferowanego IDE / edytora tekstu ... Nie używałem vima, użyłem Kate, ponieważ jestem na KUbuntu 13.04 ... W każdym razie pobierz lub skopiuj program testowy stąd (na dole strony) i zapisz, zakończ.
Teraz skompiluj za pomocą
g++ -std=c++11 -c main.cpp
- nie jestem pewien, czy c ++ 11 jest wymagane, ale użyłemnullptr
tak, potrzebowałem go ... Być może będziesz musiał zaktualizować swoje gcc do wersji 4.7 lub nadchodzącej wersji 4.8 ... Informacje o tym tutaj .Następnie napraw błędy, jeśli wpisałeś program ręcznie lub próbowałeś być „zbyt sprytny” i coś nie działało ... Następnie połącz 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 "Zainstaluj zależności kompilacji", możesz również chcieć sprawdzić, czy masz zainstalowane biblioteki deweloperskie GL, GLU, X11 Xxf86vm (cokolwiek to jest) Xrandr posix-thread i Xi (cokolwiek to jest) . Może zaktualizuj też sterowniki graficzne, myślę, że GLFW 3 może wymagać OpenGL w wersji 3 lub wyższej? Może ktoś może to potwierdzić? Może być również konieczne dodanie opcji konsolidatora-ldl -lXinerama -lXcursor
, aby działał poprawnie, jeśli otrzymujesz niezdefiniowane odwołania dodlclose
(kredyt dla @ user2255242).I tak, naprawdę potrzebowałem tylu
-l
!Krok 3: Skończyłeś, miłego dnia!
Mam nadzieję, że te informacje były poprawne i wszystko działało, a pisanie programu testowego GLFW sprawiało Ci przyjemność. Również mam nadzieję, że ten przewodnik pomógł, czy pomoże, kilka osób w przyszłości, którzy walczą jak byłem
dzisiajwczoraj!Nawiasem mówiąc, wszystkie tagi to rzeczy, których szukałem w stackoverflow, szukając odpowiedzi, która nie istniała. (Aż do teraz.) Mam nadzieję, że są one tym, czego szukałeś, gdybyś był w podobnej sytuacji co ja.
Uwaga autora:
To może nie być dobry pomysł. Ta metoda (używając sudo make install) może być niebezpieczna dla twojego systemu. (Zobacz Nie psuj Debiana)
W idealnym przypadku ja lub ktoś inny powinien zaproponować rozwiązanie, które nie tylko instaluje pliki lib itp. W domyślnych katalogach systemu, ponieważ powinny one być zarządzane przez menedżerów pakietów, takich jak
apt
, a zrobienie tego może spowodować konflikt i zepsuć system zarządzania pakietami.Zobacz nową „odpowiedź na rok 2020”, aby zapoznać się z alternatywnym rozwiązaniem.
źródło
pow
więc dodanie-lm
do opcji kompilacji naprawiło to.sudo apt-get update && sudo apt-get install build-essential libevent-pthreads-2.0.5 doxygen xorg-dev libglu1-mesa-dev
Rozwiązałem to w ten sposób
Plik pkg-config zawiera opis wszystkich niezbędnych flag i zależności czasu kompilacji i linkowania oraz zależności potrzebnych do korzystania z biblioteki.
pokazuje mi to
Nie wiem, czy wszystkie te biblioteki są rzeczywiście potrzebne do kompilacji, ale dla mnie działa ...
źródło
Zauważ, że nie potrzebujesz tak wielu
-l
s, jeśli zainstalujesz glfw zBUILD_SHARED_LIBS
opcją. (Możesz włączyć tę opcję, uruchamiającccmake
najpierw).W ten sposób
sudo make install
zainstalujesz udostępnioną bibliotekę w/usr/local/lib/libglfw.so
. Następnie możesz skompilować przykładowy plik za pomocą prostego:Następnie nie zapomnij dodać / usr / local / lib / do ścieżki wyszukiwania bibliotek współdzielonych przed uruchomieniem programu. Można to zrobić za pomocą:
Możesz to umieścić w swoim,
~/.bashrc
aby nie musieć wpisywać go cały czas.źródło
ldd
aby sprawdzić, jakie biblioteki są ładowane przez program po uruchomieniu. Jest to również dobry sposób na sprawdzenie, czy biblioteki zostały poprawnie znalezione. Możesz użyćldd
w swoim programie i na /usr/local/lib/libglfw.so, aby porównać.sudo ldconfig
powinno rozwiązać ten problem i nie wymagać konfiguracji LD_LIBRARY_PATH każdego razu. Ta odpowiedź zawiera dyskusję, dlaczego może to być preferowane.Ponieważ zaakceptowana odpowiedź nie pozwala na więcej zmian, podsumuję ją jednym poleceniem kopiuj-wklej (Zastąp 3.2.1 najnowszą wersją dostępną w pierwszym wierszu):
Jeśli chcesz skompilować program, użyj następujących poleceń:
Jeśli korzystasz z samouczka learnopengl.com, być może będziesz musiał również skonfigurować GLAD. W takim przypadku kliknij 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 witryny i pobierz plik zip. Wyodrębnij go i skompiluj źródła za pomocą następującego polecenia:
Teraz polecenia kompilacji programu wyglądają następująco:
źródło
Zaktualizowana odpowiedź 2020
Jest rok 2020 (7 lat później) i w tym czasie dowiedziałem się więcej o Linuksie. Szczególnie, że uruchamianie
sudo make install
podczas instalowania bibliotek może nie być dobrym pomysłem , ponieważ mogą one zakłócać system zarządzania pakietami. (W tym przypadkuapt
ponieważ używam Debiana 10.)Jeśli to nie jest poprawne, popraw mnie w komentarzach.
Alternatywne proponowane rozwiązanie
Te informacje pochodzą z dokumentacji GLFW, jednak rozszerzyłem / usprawniłem informacje, które są istotne dla użytkowników Linuksa.
Być może będziesz musiał uciekać
sudo apt-get build-dep glfw3
przed (?). Uruchomiłem zarówno to polecenie,sudo apt install xorg-dev
jak i zgodnie z instrukcją.Wreszcie biegnij
make
Teraz w katalogu projektu wykonaj następujące czynności. (Przejdź do swojego projektu, który używa bibliotek glfw)
Utwórz
CMakeLists.txt
, mój wygląda takJeśli nie lubisz CMake, przepraszam, ale moim zdaniem jest to najłatwiejszy sposób na szybkie uruchomienie projektu. Poleciłbym nauczyć się go używać, przynajmniej na podstawowym poziomie. Niestety nie znam żadnego dobrego tutoriala o CMake
Następnie zrób
cmake .
imake
, Twój projekt powinien zostać skompilowany i połączony z biblioteką współdzieloną glfw3Istnieje pewien sposób tworzenia dynamicznie połączonej biblioteki. Wydaje mi się, że użyłem tutaj metody statycznej. Proszę skomentuj / dodaj sekcję w tej odpowiedzi poniżej, jeśli wiesz więcej niż ja
To powinno działać na innych systemach, jeśli nie, daj mi znać, a pomogę, jeśli będę mógł
źródło
Świetny przewodnik, dziękuję. Biorąc pod uwagę większość instrukcji tutaj, prawie zbudowano go dla mnie, ale pozostał jeden błąd.
Po wyszukaniu tego błędu musiałem dopisać
-ldl
do linii poleceń.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 ... poza naprawą błędu łączenia. Widzę jednak ten przełącznik linii cmd w powyższym poście.
źródło
Jeśli ktoś robi się leniwy i być może nie wie, jak skonfigurować powłokę dla wszystkich tych bibliotek i -l s, to stworzyłem skrypt w Pythonie (musisz mieć python3, większość użytkowników linuxa go ma), który pozwala łatwo skompilować skrypty i uruchamiać je bez większych zmartwień, po prostu ma regularne wywołania systemowe, po prostu starannie ułożone, stworzyłem to dla siebie, ale może by się przydałoby: oto jest
źródło
Dobrze opisana odpowiedź już tam jest, ale przeszedłem przez ten KRÓTSZY przepis:
$ brew install glfw
cd /home/linuxbrew/.linuxbrew/Cellar/glfw/X.X/include
sudo cp -R GLFW /usr/include
Wyjaśnienie: Udało nam się zbudować GLFW przez CMAKE, co jest robione przez Linuxbrew (port Linux ukochanego Homebrew). Następnie skopiuj pliki nagłówkowe do miejsca, z którego Linux czyta (
/usr/include
).źródło