Шаблон qmake subdir на Mac OS X
Я создаю шаблон subdir для проекта Qt (5.2.0), как описано в этом ответе
я могу построить это на платформе win и linux с MinGW и GCC, но на Mac OS я получаю следующую ошибку
dyld: Library not loaded: libfile-helpers.1.dylib
Referenced from: /Users/myusername/Programming/Qt/build-ProjectName-qt-Desktop_Qt_5_2_0_clang_64bit-Debug/build/project
Reason: image not found
Программа неожиданно завершилась.
otool -L в главном исполняемом файле дает следующий вывод
libfile-helpers.1.dylib (compatibility version 1.0.0, current version 1.0.0)
libgui.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/Users/myusername/Qt/5.2.0/clang_64/lib/QtGui.framework/Versions/5/QtGui (compatibility version 5.2.0, current version 5.2.0)
/Users/myusername/Qt/5.2.0/clang_64/lib/QtCore.framework/Versions/5/QtCore (compatibility version 5.2.0, current version 5.2.0)
/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 60.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
но файлы *.dylib помещены в подкаталоги и не могут быть найдены в текущей настройке
Как настроить проект для правильного запуска после сборки без ручных манипуляций с файлами, одно изменение, которое я делаю в build.pro (см. ответ в начале), добавляет следующий текст
macx {
CONFIG -= app_bundle
}
(uname -a)
Darwin MacBook.local 13.0.2 Darwin Kernel Version 13.0.2: Sun Sep 29 19:38:57 PDT 2013; root:xnu-2422.75.4~1/RELEASE_X86_64 x86_64
с qmake ( -v)
QMake version 3.0
Using Qt version 5.2.0 in /Users/myusername/Qt/5.2.0/clang_64/lib
и лязг (-v)
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.2
Thread model: posix
Я nooby в собственной разработке OSX и не могу решить это самостоятельно. Спасибо за ответы!
2 ответа
В Mac OS X процесс развертывания немного отличается от других платформ. В основном вы создадите пакет приложений, который должен содержать все необходимые библиотеки. Документация Qt описывает весь процесс очень хорошо. Вот некоторые ресурсы:
Qt для Mac OS X - Развертывание
Взгляните на Mac Deployment Tool
Я предполагаю, что у вас есть такой проект subdirs с этой структурой каталогов:
subdirs
+ app
+ lib
То есть проект subdirs (здесь, творчески называется subdirs
) с приложением (называется app
) и библиотека (называется lib
) проект.
Теперь, если ваш app
использует динамически связанный / общий lib
проект в вашем subdirs
Проект на OSX, вы получите следующую ошибку:
dyld: Library not loaded: libLIBTARGET.1.dylib
Referenced from: /path/to/qt/build/dir/build-PROJECT-DETAILS/APPDIR/APPTARGET
Reason: image not found
The program has unexpectedly finished.
где
LIBTARGET
этоTARGET
ценность вашегоlib
проект,PROJECT
это имя твоегоsubdirs
проект,DETAILS
ваши детали сборки и запуска,APPDIR
это каталогapp
проект иAPPTARGET
этоTARGET
ценность вашегоapp
проект.
Чтобы избавиться от этой проблемы на OSX во время разработки проекта, вам нужно установить (OSX-специфичный) DYLD_LIBRARY_PATH
к lib
каталог с настройками запуска всего проекта в Projects -> Build & Run -> Run Environment и добавьте переменную DYLD_LIBRARY_PATH
со значением ../LIBDIR/
- или, если вы работаете из командной строки, export
эта переменная.
Затем для развертывания приложения необходимо убедиться, что динамическая библиотека помещена в ваш пакет приложения, или создать статически скомпилированный пакет. Больше здесь на Digia: Развертывание Mac OSX.