GLFW 3를 빌드 및 설치하고 Linux 프로젝트에서 사용하는 방법


95

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를 컴파일하고 프로그램을 구축하는 섹션이 새로 생겼습니다.


여기에 올려 주셔서 감사합니다. 분명히 많은 작업이 진행되었습니다. 그래도 질문과 답변으로 나누시겠습니까? 자신의 질문에 자신의 답변을 추가하고 정답으로 표시 할 수 있습니다.
Fraser

@Fraser 예 물론 그렇게하는 것이 더 나을 것이라고 생각한다면
user3728501 jul.

1
두 번째입니다. 매우 GLFW 같은 I하지만 정말 좌절되지는 맥에서 등 V3 컴파일하는 방법에 관한 문서를 찾을 수
user18490

1
@ user18490 그래, GLFW가 "더 나은 과잉"인 것 같아서 그런 종류의 놀라운 것을 발견했습니다. 나는 그들이 문서에서 과잉이 학습에만 좋다고 언급했다고 확신하며 전문적인 윈도우 라이브러리를 원한다면 GLFW를 사용하십시오. 그래서 놀라운 것은 그들이 얼마나 좋은지 말해 주지만 설치 방법은 말하지 않는다는 것입니다! (SFML과 매우 다름)
user3728501

@ 에드워드 버드. : 난 드디어 GLFW를 설치에 관한이 웹 페이지에 대한 유용한 정보를 찾을 scratchapixel.com/lessons/3d-basic-lessons/lesson-2-get-started/...
user18490을

답변:


125

1 단계 : CMAKE로 시스템에 GLFW 3 설치

이번 설치에서는 KUbuntu 13.04, 64bit를 사용했습니다.

첫 번째 단계는 이 링크를 사용하여 www.glfw.org 에서 최신 버전 (향후 버전이 비슷한 방식으로 작동한다고 가정)을 다운로드하는 것입니다 .

다음 단계는 아카이브를 추출하고 터미널을 여는 것입니다. cdglfw-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신용)에 대한 정의되지 않은 참조를받는 경우 올바르게 작동하도록 링커 옵션을 추가해야 할 수도 있습니다 .

그리고 네, 정말 많은 -ls 가 필요했습니다 !

3 단계 : 완료되었습니다. 좋은 하루 되세요!

이 정보가 정확하고 모든 것이 당신에게 도움이 되었기를 바랍니다. 그리고 당신은 GLFW 테스트 프로그램 작성을 즐겼습니다. 또한이 가이드가 어제 오늘 처럼 어려움을 겪고있는 미래의 몇몇 사람들에게 도움이 되었으면합니다 .

그건 그렇고, 모든 태그는 존재하지 않는 대답을 찾기 위해 stackoverflow에서 검색 한 것입니다. (지금까지.) 당신이 나와 비슷한 위치에 있다면 그것들이 당신이 찾던 것입니다.

저자 참고 :

이것은 좋은 생각이 아닐 수도 있습니다. 이 방법 (sudo make install 사용)은 시스템에 해로울 수 있습니다. (Do n't Break Debian 참조)

이상적으로는 나 또는 다른 사람이 lib 파일 등을 시스템 기본 디렉토리에 설치하지 않는 솔루션을 제안해야합니다. 이러한 파일은 apt.

대체 솔루션은 새로운 "2020 답변"을 참조하십시오.


나는 이것을 알아 내기 위해 몇 시간을 보냈다. 이 대답은 나를 위해 일했습니다 : Ubuntu 13.04, x64. NetBeans C ++ IDE (프로젝트 속성-> 빌드-> 링커-> 라이브러리-> 옵션 추가-> 기타 옵션에 링커 줄 추가-그렇지 않으면 그대로 지침을 따르십시오)
Scott Drew

분명히 (GLFW 3.0.3과 함께) 무언가 사용 pow하므로 -lm컴파일 옵션에 추가 하여 수정했습니다.
Forest Katsch 2010 년

1
에드워드, 감사합니다. 나는 모든 -l 요구 사항이 내가 뭔가 잘못하고 있다는 것을 의미하는 것이 아니라는 온전한 검사가 필요했습니다.
wrongu

3
젠장 당신은 fu **** 천재입니다 !!!! 당신은 3 시간을 얻었고, 나는 이것을하기 위해 3 일을 얻었습니다 (실제로 어디서부터 시작해야할지 조사하고, 과식 역사에 대한 읽기 등등). 감사합니다. 대단히 감사합니다. 나는 또한 내가 glfw 페이지를 읽고 그들의 튜토리얼을 따르는 일을 할 수 없었고 이것을 발견했을 때 거의 포기했고 그들은 당신처럼 간단하고 직접적으로 설명하지 않는다는 조언을 원합니다. 당신이 여기서 한 멋진 일!!
Victor R. Oliveira 2014

1
깨끗한 리눅스 민트 나는이 패키지를 설치했다 :sudo apt-get update && sudo apt-get install build-essential libevent-pthreads-2.0.5 doxygen xorg-dev libglu1-mesa-dev
LENAR 호이트

18

이런 식으로 해결했습니다

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  

이 모든 라이브러리가 실제로 컴파일에 필요한지 모르겠지만 저에게는 작동합니다 ...


3
이 대답은 꼭 봐야 할 것입니다. 이전에는 pkg-config에 대해 몰랐습니다. 하지만 오늘부터 끝까지 사용할 것입니다. 모든 종류의 연결 종속성 문제를 해결하는 데 도움이되기 때문입니다. 멋진 답변에 감사드립니다.
사얀 Bhattacharjee

18

옵션을 -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입력 할 필요가 없도록 입력 할 수 있습니다.


1
이 정보는 터미널을 사용하여 컴파일하고 실행하는 대신 하나의 IDE를 설정하려는 사람들에게 정말 중요합니다. 이 작업을 수행하는 방법에 대해 자세히 설명해 주시겠습니까? 나는 시도했지만 모두에서 성공하지
빅터 R. 올리베이라

여기 멍청이! 나는 이것이 조금 오래되었다는 것을 알고 있지만 정말 도움이되었습니다. 누군가가 공유 라이브러리를 사용하면 왜 공유 라이브러리를 사용하여 다른 모든 라이브러리를 링크 할 필요가 없는지 설명 (또는 설명하는 누군가에게 링크) 할 수 있습니까? 또한 컴파일 후 LD_LIBRARY_PATH 변수설정해야 하거나 새로 컴파일 된 실행 파일을 실행하려고 할 때 gnu 오류가 발생했습니다.
Sammaron 2014

1
안녕하세요 Sammaron, LD_LIBRARY_PATH에 대해 이야기 해 주셔서 감사합니다.이 내용을 포함하도록 답변을 업데이트하겠습니다. glfw 라이브러리를 사용할 때 다른 모든 라이브러리를 지정할 필요가없는 이유는 glfw가 이미로드하기 때문입니다. 명령 ldd을 사용하여 프로그램이 실행될 때 어떤 라이브러리가로드되는지 확인할 수 있습니다 . 라이브러리가 제대로 발견되었는지 확인하는 좋은 방법이기도합니다. 당신이 사용할 수있는 ldd프로그램과 /usr/local/lib/libglfw.so에 비교.
CastleDefender

답장을 보내 주셔서 감사합니다! 또한 약간의 수정을 원했습니다. LD_LIBRARY_PATH 변수는 실행 가능한 솔루션이지만 로더가 어쨌든 검색 할 표준 경로에 라이브러리가 설치된 경우 실행 sudo ldconfig하면이 문제가 해결 되고 LD_LIBRARY_PATH를 구성 할 필요가 없습니다. 매번. 이 답변 은 이것이 선호되는 이유에 대한 토론을 제공합니다.
Sammaron

빌드 공유를 한 후에 다른 2 명을 컴파일 / 링크해야했습니다. g ++ main.cpp -L / usr / local / lib / -lglfw -lGLU -lGL이 나를 위해 일했습니다.
Sridhar Thiagarajan

9

수락 된 답변은 더 많은 편집을 허용하지 않기 때문에 단일 복사-붙여 넣기 명령으로 요약하겠습니다 (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도 설정해야 할 수 있습니다. 이 경우이 링크를 클릭하십시오

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

그런 다음 웹 사이트 오른쪽 하단의 "생성"버튼을 클릭하고 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

2
훌륭한! GLFW v3.2.1과 함께 Ubuntu 16.04에서 나를 위해 일했습니다. 두 가지 사소한 수정 만 있습니다. set version = XXX는 단순히 version = "XXX"여야하며이 줄 끝에 .zip이 없어야합니다. cd glfw-$ {version} .zip
Tim

2

훌륭한 가이드, 감사합니다. 여기에 대부분의 지침이 주어지면 거의 나를 위해 구축되었지만 남은 오류가 하나 있습니다.

/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 라인 스위치가 표시됩니다.


.o 및 .exec 파일이 있습니다. 실행하는 방법을 도와주세요.
Buddhika Chaturanga

0

누군가가 게으르고 아마도 모든 라이브러리와 -l에 대해 셸을 구성하는 방법을 모르는 경우 쉽게 컴파일 할 수있는 python 스크립트 (python3이 있어야하고 대부분의 Linux 사용자가 가지고 있음)를 만들었습니다. 많은 걱정없이 스크립트를 실행하고 정기적 인 시스템 호출이 있고 깔끔하게 정리되어 있습니다. 제 자신을 위해 만들었지 만 유용 할 수도 있습니다. 여기에 있습니다.


0

잘 설명 된 답변은 이미 있지만이 SHORTER 레시피를 살펴 보았습니다 .

  1. Linuxbrew 설치
  2. $ brew install glfw
  3. cd /home/linuxbrew/.linuxbrew/Cellar/glfw/X.X/include
  4. sudo cp -R GLFW /usr/include

설명 : Linuxbrew (사랑하는 Homebrew의 Linux 포트)에서 수행하는 CMAKE로 GLFW를 빌드합니다. 그런 다음 Linux가 읽는 위치 ( /usr/include)에 헤더 파일을 복사합니다 .


0

2020 업데이트 된 답변

2020 년 (7 년 후)이며이 기간 동안 Linux에 대해 더 많이 배웠습니다. 특히 sudo make install라이브러리를 설치할 때 실행 하는 것은 패키지 관리 시스템을 방해 할 수 있으므로 실행하는 것이 좋지 않을 수 있습니다 . (이 경우에는 aptDebian 10을 사용하고 있습니다.)

이것이 맞지 않으면 댓글에서 저를 수정하십시오.

대안 제안 솔루션

이 정보는 GLFW 문서에서 가져 왔지만 Linux 사용자와 관련된 정보를 확장 / 간소화했습니다.

  • 홈 디렉토리로 이동하여 github에서 glfw 저장소를 복제하십시오.
cd ~
git clone https://github.com/glfw/glfw.git
cd glfw
  • 이 시점에서 빌드 디렉토리를 만들고 여기 지침 ( glfw 빌드 지침 )을 따를 수 있지만 그렇게하지 않기로 선택했습니다. 다음 명령은 2020 년에도 여전히 작동하는 것으로 보이지만 glfw 온라인 지침에 명시 적으로 명시되어 있지 않습니다.
cmake -G "Unix Makefiles"
  • sudo apt-get build-dep glfw3(?) 전에 실행해야 할 수도 있습니다 . 이 명령과 sudo apt install xorg-dev지침에 따라 모두 실행했습니다 .

  • 마지막으로 실행 make

  • 이제 프로젝트 디렉토리에서 다음을 수행하십시오. (glfw libs를 사용하는 프로젝트로 이동)

  • CMakeLists.txt, 광산 만들기는 다음과 같습니다.

CMAKE_MINIMUM_REQUIRED(VERSION 3.7)
PROJECT(project)

SET(CMAKE_CXX_STANDARD 14)
SET(CMAKE_BUILD_TYPE DEBUG)

set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)

add_subdirectory(/home/<user>/glfw /home/<user>/glfw/src)


FIND_PACKAGE(OpenGL REQUIRED)

SET(SOURCE_FILES main.cpp)

ADD_EXECUTABLE(project ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(project glfw)
TARGET_LINK_LIBRARIES(project OpenGL::GL)
  • CMake가 마음에 들지 않으면 사과하지만 제 생각에는 프로젝트를 빠르게 작동시키는 가장 쉬운 방법입니다. 최소한 기본 수준까지 사용하는 방법을 배우는 것이 좋습니다. 유감스럽게도 좋은 CMake 튜토리얼이 없습니다.

  • 그런 다음 수행 cmake .make프로젝트가 내장 glfw3 공유 lib 디렉토리에 링크해야한다,

  • 동적 링크 라이브러리를 만드는 방법이 있습니다. 여기서 정적 방법을 사용했다고 생각합니다. 나보다 더 많이 아는 경우 아래 답변에 댓글을 달거나 섹션을 추가하십시오.

  • 이 방법은 다른 시스템에서도 작동합니다. 알려주지 않으면 도움이 될 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.