Ошибка получения неопределенной ссылки на glfwOpenWindowHint при попытке запустить пример кода OpenGL SuperBible на Linux - PullRequest
0 голосов
/ 19 апреля 2020

Я впервые пытаюсь запустить пример кода OpenGL SuperBible 6th edition в моей системе Manjaro (arch). Я следовал за HOWTOBUILD.txt, установил mesa и glfw (glfw-wayland, не уверен, есть ли разница) через pacman. Пытался выполнить первый раз безуспешно, затем изменил ошибку в CMakeList.txt, как описано здесь { ссылка }, он избавился от ошибки undefined reference to 'glfwInit', но все остальные неопределенные ошибки остались. Может кто-нибудь помочь мне скомпилировать это без ошибок?

пример кода: https://github.com/openglsuperbible/sb6code

полная ошибка при попытке запустить make:

/usr/bin/ld: CMakeFiles/wrapmodes.dir/src/wrapmodes/wrapmodes.cpp.o: in function `sb6::application::run(sb6::application*)':
wrapmodes.cpp:(.text._ZN3sb611application3runEPS0_[_ZN3sb611application3runEPS0_]+0x8b): undefined reference to `glfwOpenWindowHint'
/usr/bin/ld: wrapmodes.cpp:(.text._ZN3sb611application3runEPS0_[_ZN3sb611application3runEPS0_]+0xa1): undefined reference to `glfwOpenWindowHint'
/usr/bin/ld: wrapmodes.cpp:(.text._ZN3sb611application3runEPS0_[_ZN3sb611application3runEPS0_]+0xb0): undefined reference to `glfwOpenWindowHint'
/usr/bin/ld: wrapmodes.cpp:(.text._ZN3sb611application3runEPS0_[_ZN3sb611application3runEPS0_]+0xbf): undefined reference to `glfwOpenWindowHint'
/usr/bin/ld: wrapmodes.cpp:(.text._ZN3sb611application3runEPS0_[_ZN3sb611application3runEPS0_]+0xd5): undefined reference to `glfwOpenWindowHint'
/usr/bin/ld: CMakeFiles/wrapmodes.dir/src/wrapmodes/wrapmodes.cpp.o:wrapmodes.cpp:(.text._ZN3sb611application3runEPS0_[_ZN3sb611application3runEPS0_]+0xf5): more undefined references to `glfwOpenWindowHint' follow
/usr/bin/ld: CMakeFiles/wrapmodes.dir/src/wrapmodes/wrapmodes.cpp.o: in function `sb6::application::run(sb6::application*)':
wrapmodes.cpp:(.text._ZN3sb611application3runEPS0_[_ZN3sb611application3runEPS0_]+0x133): undefined reference to `glfwGetDesktopMode'
/usr/bin/ld: wrapmodes.cpp:(.text._ZN3sb611application3runEPS0_[_ZN3sb611application3runEPS0_]+0x18b): undefined reference to `glfwOpenWindow'
/usr/bin/ld: wrapmodes.cpp:(.text._ZN3sb611application3runEPS0_[_ZN3sb611application3runEPS0_]+0x1e9): undefined reference to `glfwOpenWindow'
/usr/bin/ld: wrapmodes.cpp:(.text._ZN3sb611application3runEPS0_[_ZN3sb611application3runEPS0_]+0x25b): undefined reference to `glfwSetMousePosCallback'
/usr/bin/ld: wrapmodes.cpp:(.text._ZN3sb611application3runEPS0_[_ZN3sb611application3runEPS0_]+0x267): undefined reference to `glfwSetMouseWheelCallback'
/usr/bin/ld: wrapmodes.cpp:(.text._ZN3sb611application3runEPS0_[_ZN3sb611application3runEPS0_]+0x280): undefined reference to `glfwEnable'
/usr/bin/ld: wrapmodes.cpp:(.text._ZN3sb611application3runEPS0_[_ZN3sb611application3runEPS0_]+0x289): undefined reference to `glfwDisable'
/usr/bin/ld: wrapmodes.cpp:(.text._ZN3sb611application3runEPS0_[_ZN3sb611application3runEPS0_]+0x29a): undefined reference to `glfwGetWindowParam'
/usr/bin/ld: wrapmodes.cpp:(.text._ZN3sb611application3runEPS0_[_ZN3sb611application3runEPS0_]+0x3bc): undefined reference to `glfwGetWindowParam'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/wrapmodes.dir/build.make:105: bin/wrapmodes] Error 1
make[1]: *** [CMakeFiles/Makefile2:296: CMakeFiles/wrapmodes.dir/all] Error 2
make: *** [Makefile:104: all] Error 2

1 Ответ

1 голос
/ 19 апреля 2020

Я скачал исходный код и попробовал все, что вы сделали, и не удивительно, получил то же сообщение об ошибке.

И похоже, что исходный код использует GLFW2 вместо GLFW3.

glfwOpenWindowHint переименован в glfwWindowHint в GLFW3

См .: glfwOpenWindowHint не объявлен в этой области GLFW3 & GLEW

Вы можете попробовать установить GLFW2 и запустить его снова , Поскольку GLFW2 доступен в Ubuntu Xenial, не забудьте настроить sources.list соответственно.

Для OpenGL SuperBible 6th

EDIT : я не смог установить libglfw2 из Ubuntu Xenial репозиторий. И вручную установлен dpkg с официального сайта.

  1. скачать .deb файл с https://launchpad.net/ubuntu/xenial/+package/libglfw-dev

  2. go в папку .deb устанавливается и запускается sudo dpkg -i [name of libglfw2].deb

  3. Запустите find . -name "libglfw*" в /usr/lib, чтобы найти путь к библиотеке. (может быть несколько libglfw.so, поскольку вы уже скачали GLFW3, поэтому будьте осторожны)

  4. Создайте символическую ссылку c для библиотеки динамического c, только что установленной, запустив Следующая команда:

    sudo ln -s /usr/lib/[path to file]/[filename] /usr/lib/[path to file]/libglfw2.so

  5. Изменить sb6code/CMakeFiles/tunnel.dir/link.txt следующим образом

    -lglfw до -lglfw2

  6. Выполнить make

Для OpenGL SuperBible 7th

Если вы уже установили libglfw3, но не смогли запустить cmake .., это Это может быть связано с тем, что ваш libglfw3.so хранится как libglfw.so.

. В этом случае вы можете создать символическую c ссылку на него:

sudo ln -s /usr/lib/[path to file]/[libglfw name].so /usr/lib/[path to file]/libglfw3.so

Сохраните и снова запустите cmake .. внутри build.

Если произойдет сбой из-за компоновщика, убедитесь, что у вас есть все зависимости:

libglfw3-dev libx11-dev libxrandr-dev libxinerama-dev libxi-dev libxxf86vm-dev libxcursor-dev
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...