Как создать и установить GLFW 3 и использовать его в проекте Linux

GLFW3

Вчера вечером я работал поздно, пытаясь собрать GLFW 3 пакеты для Linux из источника. Этот процесс занял у меня очень много времени, всего около 3 часов, отчасти потому, что я не знаком с CMake, а отчасти потому, что я незнаком с GLFW.

Я надеюсь, что этот пост спасет вас от трудностей, которые у меня были вчера! Я думал, что должен сделать короткую рецензию и, надеюсь, спасут вас несколько часов вашей жизни...

Благодаря "urraka", "b6" и "niklas" на IRC-канале #glfw мне удалось получить рабочую версию glfw версии 3.0.1.

Оказывается, это не тривиальный процесс (конечно, не для меня, я не эксперт), поскольку в Интернете не так много документации о glfw3, особенно о настройке с помощью CMake.

Меня попросили разделить это на раздел вопросов и ответов, и поэтому я сделал это, а части ответов теперь ниже.

Являетесь ли вы сотрудником GLFW или членом команды GLFW?

Если кто-либо из разработчиков GLFW3 видит это, то мое сообщение для них - это добавить "настройку GLFW3 в Windows, Mac OS X и Linux" на ваш сайт! Очень легко писать программы с GLFW, так как онлайн-документация неплохая, быстрое сканирование всех доступных классов и модулей, и вы будете готовы к работе. Пример тестового проекта, представленный здесь, также очень хорош. Две основные проблемы, которые я обнаружил, были, во-первых, как мне настроить GLFW3 в моей системе, а во-вторых, как мне построить проект GLFW3? Эти две вещи, возможно, недостаточно ясны для не-эксперта.

Изменить

Был краткий обзор сегодня (Date: 2014-01-14), похоже, что веб-сайт GLFW претерпел значительные изменения с тех пор, как я последний раз смотрел, и теперь есть раздел по сбору GLFW и программ по выпуску GLFW, которые, я думаю, являются новыми.

Ответ 1

Шаг 1: Установка GLFW 3 в вашей системе с помощью CMAKE

Для этой установки я использовал KUbuntu 13.04, 64bit.

Первый шаг - загрузить последнюю версию (предполагая, что версии в будущем будут работать аналогичным образом) с сайта www.glfw.org, возможно, используя эту ссылку .

Следующим шагом будет извлечение архива и открытие терминала. cd в каталог glfw-3.X.X и запустите 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... По-видимому, я уже их имел. (См. Параметры -l, заданные на этапе компоновки g++ ниже).

Теперь вы можете ввести make, а затем make install, который, вероятно, сначала потребует sudo.

Хорошо, вам нужно получить подробный вывод на последних трех этапах CMake, рассказывая вам, что было построено или где оно было размещено. (В /usr/include, например.)

Шаг 2. Создайте тестовую программу и скомпилируйте

Следующий шаг - запустить vim ( "что?! vim?!" вы говорите) или ваш предпочтительный IDE/текстовый редактор... Я не использовал vim, я использовал Kate, потому что я на KUbuntu 13.04... В любом случае, скачайте или скопируйте тестовую программу из здесь (в нижней части страницы) и сохраните, выйдите.

Теперь скомпилируйте с помощью g++ -std=c++11 -c main.cpp - не уверен, что С++ 11 required, но я использовал 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 или выше? Может быть, кто-то может это подтвердить? Вам также может потребоваться добавить параметры компоновщика -ldl -lXinerama -lXcursor, чтобы заставить его работать правильно, если вы получаете undefined ссылки на dlclose (кредит для @user2255242).

И да, мне действительно нужно, чтобы многие -l s!

Шаг 3: Вы закончили, хорошо провели день!

Надеюсь, эта информация была правильной, и все сработало для вас, и вам понравилось писать тестовую программу GLFW. Также, надеюсь, это руководство помогло или поможет нескольким людям в будущем, которые боролись, как вчера было сегодня!

Кстати, все теги - это те вещи, которые я искал в stackoverflow, ища ответ, которого не было. (До сих пор.) Надеюсь, это то, что вы искали, если бы вы были в аналогичной позиции для меня.

Ответ 2

Обратите внимание, что вам не нужно столько -l если вы устанавливаете glfw с опцией 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

Я решил это таким образом

Файл 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  

Я не знаю, нужны ли все эти библиотеки для компиляции, но для меня это работает...

Ответ 4

Поскольку принятый ответ не допускает больше правок, я собираюсь обобщить его одной командой copy-paste (замените 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

Ответ 5

Отличный гид, спасибо. Учитывая большинство инструкций здесь, он почти построен для меня, но у меня была одна оставшаяся ошибка.

/usr/bin/ld: //usr/local/lib/libglfw3.a(glx_context.c.o): undefined reference to symbol '[email protected]@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 скомпилирован и связан.

Я новичок в Linux, поэтому я не совсем уверен, что именно делает эта дополнительная библиотека... кроме исправления моей ошибки связывания. Однако я вижу, что переключатель cmd в столбце выше.

Ответ 6

Если кто-то становится ленивым и, возможно, не знает, как настроить оболочку для всех этих библиотек и -ls, то я создал скрипт на python (у вас должен быть python3, у большинства пользователей Linux), который позволяет вам легко скомпилировать скрипты и запускайте их, не беспокоясь, у него просто есть регулярные системные вызовы, просто аккуратно организованные, я создал это для себя, но, может быть, это будет полезно: вот оно