Сборка Box2D на Linux(Ubuntu)/ Что-то с glfw
Я пытался установить Box2D через cmake -> сделать
Извините, что это так долго, В конце концов, TL;DR!
Редактировать около 3 месяцев или около того, я решил (я думаю) за аварию |Смотрите после TL; DR
Вот что я сделал: во-первых, скачал Box2D из репозитория gitHub, разархивировал и переместил в удобное место, открыл каталог Build через терминал. Потом использовал
cmake -DBOX2D_INSTALL=ON -DBOX2D_BUILD_SHARED=ON ..
как сказал мне Building.txt, и он работал нормально. Потом хотел
make
но получил 87% через ошибку в файле internal.h:
"#error" Не выбран поддерживаемый API создания окна "
Посмотрев, откуда это взялось, я обнаружил, что internal.h проверял, использовал ли я платформу win32, cocoa или x11:
#if defined(_GLFW_COCOA)
#include "cocoa_platform.h"
#elif defined(_GLFW_WIN32)
#include "win32_platform.h"
#elif defined(_GLFW_X11)
#include "x11_platform.h"
#else
#error "No supported window creation API selected"
#endif
Поскольку я установил другие библиотеки с зависимостями на xorg, и они, кажется, работают нормально, я заставил его использовать x11_platform.h (через определение _GLFW_X11 в предоставленном файле config.h).
Затем запустил команду make во второй раз. Следующая ошибка будет в файле x11_platform.h:
"#error" Не выбран поддерживаемый API создания контекста "
Казалось, что это почти то же самое, что и выше, только с GLX и EGL:
#if defined(_GLFW_GLX)
#define _GLFW_X11_CONTEXT_VISUAL window->glx.visual
#include "glx_platform.h"
#elif defined(_GLFW_EGL)
#define _GLFW_X11_CONTEXT_VISUAL window->egl.visual
#define _GLFW_EGL_NATIVE_WINDOW window->x11.handle
#define _GLFW_EGL_NATIVE_DISPLAY _glfw.x11.display
#include "egl_platform.h"
#else
#error "No supported context creation API selected"
#endif
На этот раз я провел небольшое исследование о том, что, черт возьми, они должны быть (и проверил, есть ли у меня эти mesa Thessys для EGL). Как кажется, люди говорят, что egl - это будущее. Поэтому я определил _GLFW_EGL в файле config.h.
Да, вы догадались, следующая ошибка. На этот раз даже фатальный D: в egl_platform.h (я действительно пытался использовать GLX после этой ошибки, тоже самое)
"Фатальная ошибка: ../deps/EGL/eglext.h: Нет такого файла или каталога"
Затем я искал на своем компьютере файл eglext.h и нашел его в моем /usr/include/EGL
Таким образом, я отредактировал файл Box2D/glfw/egl_platform.h, на самом деле это примечание, что мне, возможно, придется изменить путь к файлу eglext.h. Так я и сделал.
#include "/usr/include/EGL/eglext.h"
И это делает, это фактически добралось до 100%!!! Но потом это произошло: http://pastebin.com/bS2qY2KC И я не имею ни малейшего понятия, что это должно означать... Все, что я понимаю, это то, что некоторые функции вызывают некоторые вещи в libglfw.a, которые они не могут читать. Я проверил, есть ли у меня этот файл libglfw.a, на самом деле я делаю это в /usr/lib/x86_64-linux-gnu. Я немного искал и понял, что мой пакет glfw, который я получил через apt-get, может быть устаревшим / сломанным, поэтому я удалил его и установил glfw вручную с https://github.com/glfw/glfw
TL; DR:
По сути, я получил это при сборке Box2D: [см. Наклейку выше, по какой-то дурацкой причине мне не разрешено публиковать более 2 ссылок]
Я понятия не имею, что это должно сказать мне. Я увидел, что везде появляется libglfw.a, поэтому я полностью переустановил glfw (вручную), используя его файлы gitHub. Все точно так же.
Я был бы чрезвычайно благодарен, если бы был кто-то, кто мог бы сказать мне, что там происходит.
РЕДАКТИРОВАТЬ: Вот как мне удалось установить его через cmake (как я пытался выше...): В каталоге Build:
cmake -DBOX2D_INSTALL=ON -DBOX2D_BUILD_SHARED=ON -DBOX2D_BUILD_STATIC=OFF -DBOX2D_BUILD_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_VERBOSE_MAKEFILE=ON ..
sudo make
make install
1 ответ
Попробуйте эту серию команд:
git clone https://github.com/flyover/Box2D
(cd Box2D && git submodule init && git submodule update --recursive)
(mkdir -p Build && cd Build && cmake .. && make && Testbed/Testbed)