Шаблон 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.

Другие вопросы по тегам