Я пытаюсь сделать кое-что с 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")
Так что я действительно запутался.Этот файл создается автоматически при сборке и установке библиотеки.Почему эти пути родственников существуют?
Не использую ли я библиотеку так, как ее следует использовать?Что я делаю неправильно?Любые идеи, что было бы лучшим способом решить эту проблему?
Спасибо