【发布时间】:2015-06-13 19:38:07
【问题描述】:
我一直在尝试将我的 Qt 应用程序捆绑为 OSX .app,但在我启动捆绑的应用程序时遇到了奇怪的崩溃。
该应用程序使用 QtCore、QtGui、QtNetwork、QtWidgets、QtMultimedia 和 QtOpenGL 框架,以及 Jack Audio Connection Kit 作为 dylib。
我将所有关注添加到xxx.app/Content/Frameworks/ 并执行name_install_tool 以确保从@executable_path/../Frameworks/ 搜索所有内容并同样将每个框架相互链接。
在对xxx.app/Content/MacOs/xxx 执行otool -L 时,我得到以下信息:
@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)
这意味着一切正常,但是当我运行与开发环境分开的捆绑应用程序时,应用程序崩溃:
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
并且不会因缺少框架或 dylib 而崩溃。该程序在使用从 /Users/xxx/Qt/5.4/clang_64/lib 搜索的 Qt 框架的开发机器上运行时运行良好。
同时运行该程序,以便仅从 @executable_path/../Frameworks/ 搜索 libjack dylib 和从 /Users/xxx/Qt/.. 搜索 Qt 库工作正常。所以它不是 libjack(也许)。
如果在运行时加载了一些框架/lib,我怎么知道是什么?但话又说回来,它应该链接到/Users/xxx/Qt/... 并工作?
【问题讨论】:
标签: c++ macos qt frameworks bundle