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? Эти две вещи, возможно, недостаточно ясны для неспециалиста.
редактировать
Бегло взглянул сегодня (Дата: 2014-01-14), похоже, что веб-сайт GLFW претерпел серьезные изменения с тех пор, как я последний раз смотрел, и теперь есть раздел о компиляции GLFW и сборке программ с GLFW, которые, как мне кажется, являются новыми.
Ответы:
Шаг 1. Установка GLFW 3 в вашу систему с помощью CMAKE
Для этой установки я использовал 64-битную версию KUbuntu 13.04.
Первым шагом является загрузка последней версии (при условии, что версии в будущем будут работать аналогичным образом) с 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 ... По-видимому, они у меня уже были. (См. Параметры -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
- не уверен, требуется ли 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 или выше? Может, кто-нибудь сможет это подтвердить? Вам также может потребоваться добавить параметры компоновщика,-ldl -lXinerama -lXcursor
чтобы он работал правильно, если вы получаете неопределенные ссылки наdlclose
(кредит на @ user2255242).И да, мне действительно нужно было столько
-l
s!Шаг 3: Все готово, хорошего дня!
Надеюсь, эта информация была верной, и все у вас работало, и вам понравилось писать тестовую программу GLFW. Кроме того, мы надеемся , что это руководство помогло, или поможет, несколько человек в будущем , которые изо всех сил , как я был
сегоднявчера!Кстати, все теги - это то, что я искал в stackoverflow в поисках ответа, которого не было. (До сих пор.) Надеюсь, это то, что вы искали, если бы находились в таком же положении, что и я.
Примечание автора:
Возможно, это не лучшая идея. Этот метод (с использованием sudo make install) может быть опасным для вашей системы. (См. Не ломайте Debian)
В идеале я или кто-то другой должен предложить решение, которое не просто устанавливает файлы lib и т. Д. В системные каталоги по умолчанию, поскольку ими должны управлять менеджеры пакетов, такие как
apt
, и это может вызвать конфликт и сломать вашу систему управления пакетами.Альтернативное решение см. В новом «ответе 2020 года».
источник
pow
поэтому добавление-lm
к параметрам компиляции исправило это.sudo apt-get update && sudo apt-get install build-essential libevent-pthreads-2.0.5 doxygen xorg-dev libglu1-mesa-dev
Я решил это таким образом
Файл pkg-config описывает все необходимые флаги времени компиляции и времени компоновки, а также зависимости, необходимые для использования библиотеки.
показывает мне, что
Я не знаю, действительно ли все эти библиотеки необходимы для компиляции, но для меня это работает ...
источник
Обратите внимание, что вам не нужно такое количество
-l
s, если вы устанавливаете glfw сBUILD_SHARED_LIBS
опцией. (Вы можете включить эту опцию, запустивccmake
сначала).Таким образом
sudo make install
будет установить общую библиотеку в/usr/local/lib/libglfw.so
. Затем вы можете скомпилировать файл примера с помощью простого:Затем не забудьте добавить / usr / local / lib / в путь поиска разделяемых библиотек перед запуском вашей программы. Это можно сделать с помощью:
И вы можете поместить это в свой,
~/.bashrc
чтобы вам не приходилось все время печатать.источник
ldd
чтобы проверить, какие библиотеки загружаются программой при ее запуске. Это также хороший способ проверить, правильно ли найдены библиотеки. Вы можете использоватьldd
в своей программе и на /usr/local/lib/libglfw.so для сравнения.sudo ldconfig
должен решить эту проблему и не требовать настройки LD_LIBRARY_PATH каждый раз. В этом ответе обсуждается, почему это может быть предпочтительнее.Поскольку принятый ответ не допускает дополнительных изменений, я собираюсь обобщить его с помощью одной команды копирования-вставки (замените 3.2.1 последней версией, доступной в первой строке):
Если вы хотите скомпилировать программу, используйте следующие команды:
Если вы следуете руководству 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-файл. Извлеките его и скомпилируйте исходники с помощью следующей команды:
Теперь команды для компиляции вашей программы выглядят так:
источник
Отличный гид, спасибо. Учитывая большинство инструкций, он почти построен для меня, но у меня осталась одна ошибка.
После поиска этой ошибки пришлось добавить
-ldl
в командную строку.Затем был скомпилирован и связан образец приложения "hello GLFW".
Я новичок в Linux, поэтому я не совсем уверен, что именно делает эта дополнительная библиотека ... кроме исправления моей ошибки связывания. Однако я вижу этот переключатель строки cmd в сообщении выше.
источник
Если кто-то становится ленивым и, возможно, не знает, как настроить оболочку для всех этих библиотек и -l s, то я создал скрипт python (у вас должен быть python3, он есть у большинства пользователей Linux), который позволяет легко компилировать скрипты и запускать их, не беспокоясь, у него просто обычные системные вызовы, просто аккуратно организованные, я создал его для себя, но, возможно, он будет полезен: Вот это
источник
Хорошо описанный ответ уже есть, но я использовал этот КОРОТКИЙ рецепт:
$ brew install glfw
cd /home/linuxbrew/.linuxbrew/Cellar/glfw/X.X/include
sudo cp -R GLFW /usr/include
Объяснение: Нам удалось собрать GLFW с помощью CMAKE, который выполняется Linuxbrew (Linux-порт любимого Homebrew). Затем скопируйте файлы заголовков туда, откуда Linux читает (
/usr/include
).источник
2020 Обновленный ответ
Сейчас 2020 год (7 лет спустя), и за это время я узнал больше о Linux. В частности, это может быть не очень хорошая идея запускать
sudo make install
при установке библиотек, поскольку они могут мешать системе управления пакетами. (В данном случае,apt
поскольку я использую Debian 10.)Если это не так, поправьте меня в комментариях.
Альтернативное предлагаемое решение
Эта информация взята из документации GLFW, однако я расширил / упростил информацию, имеющую отношение к пользователям Linux.
Возможно, вам придется бежать
sudo apt-get build-dep glfw3
до (?). Я выполнил и эту команду, иsudo apt install xorg-dev
в соответствии с инструкциями.Наконец запустить
make
Теперь в каталоге вашего проекта сделайте следующее. (Перейдите в свой проект, который использует библиотеки glfw)
Создайте
CMakeLists.txt
, мой выглядит такЕсли вам не нравится CMake, прошу прощения, но, на мой взгляд, это самый простой способ быстро запустить ваш проект. Я бы рекомендовал научиться пользоваться им, по крайней мере, на базовом уровне. К сожалению, я не знаю ни одного хорошего руководства по CMake.
Затем сделайте
cmake .
иmake
, ваш проект должен быть построен и связан с общей библиотекой glfw3Есть способ создать динамически связанную библиотеку. Я полагаю, что использовал здесь статический метод. Прокомментируйте / добавьте раздел в этот ответ ниже, если вы знаете больше, чем я
Это должно работать в других системах, если не дайте мне знать, и я помогу, если смогу
источник