Проблемы с настройкой Ogre 3D 1.8 на MAC - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь сделать кое-что с Ogre 3D.Дело в том, что мне удалось собрать его и успешно использовать в среде Linux.Но теперь мне нужно было настроить его в среде OSX.Одна из вещей, которые я хотел сделать, - установить библиотеку в произвольном месте.Допустим,

/Users/my_user/.libs/ogre

Вот что я сделал:

  • Клонировал репродукцию людоеда в какую-то личную папку.
  • ПодписанВ инструкциях внутри репозитория я установил все зависимости с помощью Homebrew.
  • Затем я создал новую папку build и вставил в нее компакт-диск.
  • Ran cmake .., который подготавливаетbuild.
  • После этого я изменил файл CMakeCache.txt, чтобы изменить: CMAKE_INSTALL_PREFIX:PATH=/Users/my_user/.libs/ogre/
  • Ran cmake --build . --target release, который собирает всю библиотеку.
  • Затем я наконец запускаю make install, который копирует все в папку corect: /Users/my_user/.libs/ogre

До сих пор все выглядит хорошо, но проблема возникает, когда я хочу использовать библиотеку:

Я создаюновый проект cmake с простым файлом main.cpp, который включает файл Ogre.h.На самом деле.Я сделал нечто похожее на учебник Boostrap, который входит в репозиторий: https://github.com/OGRECave/ogre/blob/master/Samples/Tutorials/Bootstrap.cpp

После этого я настроил свой файл CMakeLists.txt, включив в него следующую строку:

set(OGRE_DIR /Users/my_user/.libs/ogre/CMake)

Насколько я понимаю, это заставляет cmake включать некоторые файлы cmake, установленные вместе с библиотекой, что также заставляет cmake находить все файлы, необходимые для создания приложения ogre.

Таким образом, приложение прекрасно компилируется, но когдаЯ пытаюсь запустить его, я получаю следующее сообщение об ошибке:

dyld: Library not loaded: @executable_path/../Frameworks/OgreBites.framework/Versions/1.12.0/OgreBites

Так что после этого я провел некоторое исследование.Кажется, в OSX исполняемый файл включает в себя несколько путей, чтобы узнать, где находятся необходимые динамические библиотеки (что-то вроде папки sysmte32 в windows)

Итак, я запустил

otool -L my_app

который выводит:

@executable_path/../Frameworks/OgreBites.framework/Versions/1.12.0/OgreBites (compatibility version 1.12.0, current version 1.12.0) @executable_path/../Frameworks/OgreRTShaderSystem.framework/Versions/1.12.0/OgreRTShaderSystem (compatibility version 1.12.0, current version 1.12.0) @executable_path/../Frameworks/OgreOverlay.framework/Versions/1.12.0/OgreOverlay (compatibility version 1.12.0, current version 1.12.0) @executable_path/../Frameworks/Ogre.framework/Versions/1.12.0/Ogre (compatibility version 1.12.0, current version 1.12.0) /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.250.1)

Так что по какой-то причине он пытается найти библиотеки в очень специфической папке относительно пути самого исполняемого файла.

Наконец, во всех исследованиях, которые я предпринял, чтобы попытаться решить эту проблему, я обнаружил, что файлы cmake, установленные вместе с библиотекой в ​​моем пользовательском расположении, имели несколько особых строк:

/ Users / my_user/.libs/ogre/CMake/OgreTargets-release.cmake

# Import target "OgreMain" for configuration "Release"
set_property(TARGET OgreMain APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(OgreMain PROPERTIES
  IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/macosx/Release/Ogre.framework/Versions/1.12.0/Ogre"
  IMPORTED_SONAME_RELEASE "@executable_path/../Frameworks/Ogre.framework/Versions/1.12.0/Ogre")

Так что я действительно запутался.Этот файл создается автоматически при сборке и установке библиотеки.Почему эти пути родственников существуют?

Не использую ли я библиотеку так, как ее следует использовать?Что я делаю неправильно?Любые идеи, что было бы лучшим способом решить эту проблему?

Спасибо

...