Joe*_*elä 5 c++ macos qt frameworks bundle
我一直在尝试将我的 Qt 应用程序捆绑为 OSX,.app但当我启动捆绑的应用程序时遇到奇怪的崩溃。该应用程序使用 QtCore、QtGui、QtNetwork、QtWidgets、QtMultimedia 和 QtOpenGL 框架以及 Jack Audio Connection Kit 作为 dylib。
我添加了以下所有内容xxx.app/Content/Frameworks/,并name_install_tool确保从每个框架中搜索所有内容@executable_path/../Frameworks/并将每个框架同样相互链接。
otool -L执行此操作时,xxx.app/Content/MacOs/xxx 我得到以下信息:
@executable_path/../Frameworks/libjack.0.dylib (compatibility version 1.0.0, current version 1.0.0)
@executable_path/../Frameworks/QtMultimedia.framework/Versions/5/QtMultimedia (compatibility version 5.4.0, current version 5.4.0)
@executable_path/../Frameworks/QtNetwork.framework/Versions/5/QtNetwork (compatibility version 5.4.0, current version 5.4.0)
@executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore (compatibility version 5.4.0, current version 5.4.0)
/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
@executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui (compatibility version 5.4.0, current version 5.4.0)
@executable_path/../Frameworks/QtOpenGL.framework/Versions/5/QtOpenGL (compatibility version 5.4.0, current version 5.4.0)
@executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.4.0, current version 5.4.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 104.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
Run Code Online (Sandbox Code Playgroud)
这意味着一切正常,但是当我运行与开发环境分离的捆绑应用程序时,应用程序崩溃了:
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x00007fff8fca9866 __pthread_kill + 10
1 libsystem_pthread.dylib 0x00007fff85c9a35c pthread_kill + 92
2 libsystem_c.dylib 0x00007fff85670b1a abort + 125
3 org.qt-project.QtCore 0x0000000109819159 qt_message_fatal(QtMsgType, QMessageLogContext const&, QString const&) + 9
4 org.qt-project.QtCore 0x000000010981a611 QMessageLogger::fatal(char const*, ...) const + 161
5 org.qt-project.QtGui 0x0000000109e13307 QGuiApplicationPrivate::createPlatformIntegration() + 6359
6 org.qt-project.QtGui 0x0000000109e1332b QGuiApplicationPrivate::createEventDispatcher() + 27
7 org.qt-project.QtCore 0x0000000109a34b11 QCoreApplication::init() + 113
8 org.qt-project.QtCore 0x0000000109a34a87 QCoreApplication::QCoreApplication(QCoreApplicationPrivate&) + 39
9 org.qt-project.QtGui 0x0000000109e1079e QGuiApplication::QGuiApplication(QGuiApplicationPrivate&) + 14
10 org.qt-project.QtWidgets 0x000000010a43653e QApplication::QApplication(int&, char**, int) + 206
Run Code Online (Sandbox Code Playgroud)
并且不会因缺少框架或 dylib 而崩溃。该程序在使用从 搜索到的 Qt 框架的开发机器上运行时运行良好/Users/xxx/Qt/5.4/clang_64/lib。
还运行该程序,以便仅搜索 libjack dylib@executable_path/../Frameworks/和 Qt libs/Users/xxx/Qt/..工作正常。所以它不是 libjack (也许)。
如果在运行时加载了一些框架/库,我怎样才能找到什么?但话又说回来,它应该链接/Users/xxx/Qt/...并工作吗?
这不是崩溃,而是故意中止。qt_message_fatal() 表示 stderr 上打印了一条错误消息,应该为您提供详细信息。在“控制台”应用程序中检查它。从回溯来看,我认为它找不到平台插件(libqcocoa.dylib)。插件在构建时不会链接,因此 otool 不会显示它们。您必须将平台插件(以及其他插件,如果需要的话)与应用程序捆绑在一起,其中 libqcocoa.dylib 位于 Foo.app/Contents/PlugIns/platforms,并在每个插件上运行通常的 install_name_tool 过程。
您可能还想尝试 Qt 附带的“macdeployqt”工具。至少对于不太复杂的部署场景来说效果很好(在 Qt 4 中情况更糟)
| 归档时间: |
|
| 查看次数: |
1534 次 |
| 最近记录: |