Сборка 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)
Другие вопросы по тегам