GLFW3
어젯밤 나는 소스에서 Linux 용 GLFW 3 패키지를 빌드하려고 늦게까지 작업하고있었습니다. 이 과정은 제가 CMake에 대해 잘 모르기 때문에 부분적으로는 GLFW에 익숙하지 않았기 때문에 총 3 시간 정도로 매우 오랜 시간이 걸렸습니다.
이 게시물이 어제 겪었던 어려움에서 당신을 구할 수 있기를 바랍니다! 나는 짧은 글을 써야한다고 생각했고, 당신의 삶의 몇 시간을 구할 수 있기를 바랍니다.
#glfw IRC 채널의 “urraka”, “b6″및 “niklas”덕분에 glfw 버전 3.0.1이 작동하도록 할 수있었습니다.
glfw3, 특히 CMake로 설정하는 것에 대한 웹 문서가 많지 않기 때문에 이것은 사소한 프로세스가 아닙니다 (확실히 저에게는 아닙니다, 저는 전문가가 아닙니다).
나는 이것을 질문과 대답 섹션으로 나누라는 요청을 받았기 때문에 그렇게 했으므로 대답 부분은 이제 아래에 있습니다.
GLFW의 관리자입니까, 아니면 GLFW 팀의 구성원입니까?
GLFW3의 관리자가 이것을 본다면, 그들에게 보내는 메시지는 “Windows, Mac OS X 및 Linux에서 GLFW3 설정”섹션을 웹 사이트에 추가하는 것입니다! GLFW로 프로그램을 작성하는 것은 매우 쉽습니다. 온라인 문서가 매우 훌륭하고 사용 가능한 모든 클래스와 모듈을 빠르게 스캔하면 바로 사용할 수 있습니다. 여기 에 소개 된 테스트 프로젝트의 예도 매우 좋습니다. 내가 발견 한 두 가지 주요 문제는 먼저 시스템에서 GLFW3를 어떻게 설정하고 두 번째로 GLFW3 프로젝트를 빌드하는 방법입니다. 이 두 가지는 아마도 비전문가에게는 충분히 명확하지 않을 것입니다.
편집하다
오늘 간단히 살펴보면 (날짜 : 2014-01-14) GLFW 웹 사이트가 제가 마지막으로 본 이후로 큰 변화를 겪은 것처럼 보였으며 이제 GLFW를 사용하여 GLFW를 컴파일하고 프로그램을 구축하는 섹션이 새로 생겼습니다.
답변
1 단계 : CMAKE로 시스템에 GLFW 3 설치
이번 설치에서는 KUbuntu 13.04, 64bit를 사용했습니다.
첫 번째 단계는 이 링크를 사용하여 www.glfw.org 에서 최신 버전 (향후 버전이 비슷한 방식으로 작동한다고 가정)을 다운로드하는 것입니다 .
다음 단계는 아카이브를 추출하고 터미널을 여는 것입니다. cd
glfw-3.XX 디렉토리에 넣고 실행 cmake -G "Unix Makefiles"
하면 높은 권한이 필요할 수 있으며 먼저 빌드 종속성 을 설치 해야 할 수도 있습니다 . 이 작업을 수행하려면 시도 sudo apt-get build-dep glfw
하거나 sudo apt-get build-dep glfw3
또는 수동으로 할 내가 사용했던 것처럼 sudo apt-get install cmake xorg-dev libglu1-mesa-dev
… 분명히 내가 이미 있었다 … 등의 pthread 라이브러리와 같은 당신이 필요로하는 다른 libs가있을 수 있습니다. (아래의 g ++ 링커 단계에 제공된 -l 옵션을 참조하십시오.)
이제를 입력 make
한 다음을 입력 할 수 있습니다 . make install
이 경우 sudo
먼저 입력 해야 할 것입니다 .
좋습니다. 마지막 3 개의 CMake 단계에서 빌드 된 내용이나 배치 된 위치를 알려주는 자세한 출력을 얻을 수 있습니다. ( /usr/include
예 🙂
2 단계 : 테스트 프로그램 생성 및 컴파일
다음 단계는 vim ( “what ?! vim ?!”이라고 말함) 또는 선호하는 IDE / 텍스트 편집기를 실행하는 것입니다. 저는 vim을 사용하지 않았고 Kate를 사용했습니다. KUbuntu 13.04를 사용하고 있기 때문입니다. 어쨌든 여기 (페이지 하단)에서 테스트 프로그램을 다운로드하거나 복사 하고 저장하고 종료합니다.
이제 컴파일 g++ -std=c++11 -c main.cpp
하십시오-C ++ 11이 필요한지 확실하지 않지만 nullptr
그렇게 사용 했으므로 필요했습니다 … gcc를 버전 4.7 또는 향후 버전 4.8로 업그레이드해야 할 수도 있습니다 . 여기 에 대한 정보 .
그런 다음 프로그램을 직접 입력했거나 “너무 영리하게”하려고했지만 작동하지 않는 경우 오류를 수정하십시오. 그런 다음이 괴물을 사용하여 연결하십시오! g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi
따라서 “빌드 종속성 설치”부분에서 GL, GLU, X11 Xxf86vm (무엇이든) Xrandr posix-thread 및 Xi (무엇이든) 개발 라이브러리도 설치되어 있는지 확인하고 싶을 수도 있습니다. 그래픽 드라이버도 업데이트 할 수 있습니다. GLFW 3에는 OpenGL 버전 3 이상이 필요할 수 있습니다. 누군가가 그것을 확인할 수 있습니까? (@ user2255242에 -ldl -lXinerama -lXcursor
대한 dlclose
신용)에 대한 정의되지 않은 참조를받는 경우 올바르게 작동하도록 링커 옵션을 추가해야 할 수도 있습니다 .
그리고 네, 정말 많은 -l
s 가 필요했습니다 !
3 단계 : 완료되었습니다. 좋은 하루 되세요!
이 정보가 정확하고 모든 것이 당신에게 도움이 되었기를 바랍니다. 그리고 당신은 GLFW 테스트 프로그램 작성을 즐겼습니다. 또한이 가이드가 어제 오늘 처럼 어려움을 겪고있는 미래의 몇몇 사람들에게 도움이 되었으면합니다 .
그건 그렇고, 모든 태그는 존재하지 않는 대답을 찾기 위해 stackoverflow에서 검색 한 것입니다. (지금까지.) 당신이 나와 비슷한 위치에 있다면 그것들이 당신이 찾던 것입니다.
저자 참고 :
이것은 좋은 생각이 아닐 수도 있습니다. 이 방법 (sudo make install 사용)은 시스템에 해로울 수 있습니다. (Do n’t Break Debian 참조)
이상적으로는 나 또는 다른 사람이 lib 파일 등을 시스템 기본 디렉토리에 설치하지 않는 솔루션을 제안해야합니다. 이러한 파일은 apt
.
대체 솔루션은 새로운 “2020 답변”을 참조하십시오.
답변
pkg-config 파일은 라이브러리를 사용하는 데 필요한 모든 필요한 컴파일 시간 및 링크 시간 플래그와 종속성을 설명합니다.
pkg-config --static --libs glfw3
나에게 그것을 보여줍니다
-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
이 모든 라이브러리가 실제로 컴파일에 필요한지 모르겠지만 저에게는 작동합니다 …
답변
옵션을 -l
사용하여 glfw를 설치하면 s 가 많이 필요하지 않습니다 BUILD_SHARED_LIBS
. ( ccmake
먼저 실행하여이 옵션을 활성화 할 수 있습니다 .)
이렇게 sudo make install
하면 공유 라이브러리가 /usr/local/lib/libglfw.so
. 그런 다음 간단한 방법으로 예제 파일을 컴파일 할 수 있습니다.
g++ main.cpp -L /usr/local/lib/ -lglfw
그런 다음 프로그램을 실행하기 전에 공유 라이브러리의 검색 경로에 / usr / local / lib /를 추가하는 것을 잊지 마십시오. 다음을 사용하여 수행 할 수 있습니다.
export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}
그리고 항상 ~/.bashrc
입력 할 필요가 없도록 입력 할 수 있습니다.
답변
수락 된 답변은 더 많은 편집을 허용하지 않기 때문에 단일 복사-붙여 넣기 명령으로 요약하겠습니다 (3.2.1을 첫 번째 줄에서 사용 가능한 최신 버전으로 대체).
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
프로그램을 컴파일하려면 다음 명령을 사용하십시오.
g++ -std=c++11 -c main.cpp && \
g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinerama -lXcursor
learnopengl.com 튜토리얼을 따르는 경우 GLAD도 설정해야 할 수 있습니다. 이 경우이 링크를 클릭하십시오
그런 다음 웹 사이트 오른쪽 하단의 “생성”버튼을 클릭하고 zip 파일을 다운로드합니다. 압축을 풀고 다음 명령으로 소스를 컴파일하십시오.
g++ glad/src/glad.c -c -Iglad/include
이제 프로그램을 컴파일하는 명령은 다음과 같습니다.
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
답변
훌륭한 가이드, 감사합니다. 여기에 대부분의 지침이 주어지면 거의 나를 위해 구축되었지만 남은 오류가 하나 있습니다.
/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
이 오류를 검색 한 후 -ldl
명령 줄 에 추가 해야했습니다.
g++ main.cpp -lglfw3 -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -lGL -lpthread -ldl
그런 다음 “hello GLFW”샘플 앱이 컴파일되고 연결됩니다.
나는 리눅스를 처음 접했기 때문에이 추가 라이브러리가 정확히 무엇을하는지 완전히 확신하지 못합니다 … 링크 오류를 수정하는 것 외에는. 그러나 위의 게시물에서 cmd 라인 스위치가 표시됩니다.
답변
누군가가 게으르고 아마도 모든 라이브러리와 -l에 대해 셸을 구성하는 방법을 모르는 경우 쉽게 컴파일 할 수있는 python 스크립트 (python3이 있어야하고 대부분의 Linux 사용자가 가지고 있음)를 만들었습니다. 많은 걱정없이 스크립트를 실행하고 정기적 인 시스템 호출이 있고 깔끔하게 정리되어 있습니다. 제 자신을 위해 만들었지 만 유용 할 수도 있습니다. 여기에 있습니다.
답변
잘 설명 된 답변은 이미 있지만이 SHORTER 레시피를 살펴 보았습니다 .
- Linuxbrew 설치
$ brew install glfw
cd /home/linuxbrew/.linuxbrew/Cellar/glfw/X.X/include
sudo cp -R GLFW /usr/include
설명 : Linuxbrew (사랑하는 Homebrew의 Linux 포트)에서 수행하는 CMAKE로 GLFW를 빌드합니다. 그런 다음 Linux가 읽는 위치 ( /usr/include
)에 헤더 파일을 복사합니다 .