我有一个问题,我的应用程序无法在10.6 Snow Leopard上运行。
我用这些参数编译:
qmake LSPRO.pro -r -spec macx-clang CONFIG+=release CONFIG+=x86_64
在我的Pro文件中,我有以下这些元素:
TEMPLATE = app
HEADERS = \
mainwindow.h \
app_mediamanager.h \
api.h \
tool_htmleditor.h \
tool_videoencoder.h \
tool_thumbnaileditor.h
SOURCES = \
main.cpp \
mainwindow.cpp \
app_mediamanager.cpp \
api.cpp \
tool_htmleditor.cpp \
tool_videoencoder.cpp \
tool_thumbnaileditor.cpp
QT += network webkitwidgets widgets concurrent sql
QMAKE_CXXFLAGS_X86_64 += -mmacosx-version-min=10.6
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6
ICON = icon.icns
RESOURCES = lspro.qrc
但即使有一个简单的Hello世界或示例文件,它也不起作用......
我用macdeployqt脚本添加库。 当在10.6上运行时,我在报告中将其视为错误:
Dyld Error Message:
Library not loaded: /usr/lib/libc++.1.dylib
Referenced from: /Users/username/Desktop/LSPRO.app/Contents/MacOS/../Frameworks/QtWebKitWidgets.framework/Versions/5/QtWebKitWidgets
Reason: image not found
问题很简单:如何从10.8中的干净Qt5中定位10.6?
感谢评论,看起来10.6还没有附带c ++ 11支持,导致应用程序在查找时崩溃。我尝试了两种解决方案:
失败解决方案1 :我使用noc ++ 11标志重建Qt5,生成的应用程序在snowleopard上启动,但在Qwebkit中丢失了一些内部元素Videoplayer,无法调用外部二进制/执行命令(app虽然二进制文件在直接调用时运行正常,但可能更加未被发现,因此崩溃了EXC_BAD_ACCESS)。
失败的解决方案2 :我天真地尝试在snowleopard中包含缺少的dylib(libc ++。1.dylib和libc ++ abi.dylib),但应用程序仍然崩溃并显示以下消息:
Dyld Error Message:
Symbol not found: _NSPreferredScrollerStyleDidChangeNotification
Referenced from: /Volumes/SANS TITRE/tests/LSPRO1.app/Contents/MacOS/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets
Expected in: /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
@executable_path/../Frameworks/QtWebKitWidgets.framework/Versions/5/QtWebKitWidgets (compatibility version 5.1.0, current version 5.1.0)
@executable_path/../Frameworks/QtQuick.framework/Versions/5/QtQuick (compatibility version 5.1.0, current version 5.1.0)
@executable_path/../Frameworks/QtQml.framework/Versions/5/QtQml (compatibility version 5.1.0, current version 5.1.0)
@executable_path/../Frameworks/QtNetwork.framework/Versions/5/QtNetwork (compatibility version 5.1.0, current version 5.1.0)
@executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore (compatibility version 5.1.0, current version 5.1.0)
@executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui (compatibility version 5.1.0, current version 5.1.0)
@executable_path/../Frameworks/QtOpenGL.framework/Versions/5/QtOpenGL (compatibility version 5.1.0, current version 5.1.0)
@executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.1.0, current version 5.1.0)
@executable_path/../Frameworks/QtPrintSupport.framework/Versions/5/QtPrintSupport (compatibility version 5.1.0, current version 5.1.0)
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 19.0.0)
@executable_path/../Frameworks/QtWebKit.framework/Versions/5/QtWebKit (compatibility version 5.1.0, current version 5.1.0)
@executable_path/../Frameworks/QtSql.framework/Versions/5/QtSql (compatibility version 5.1.0, current version 5.1.0)
@executable_path/../Frameworks/QtSensors.framework/Versions/5/QtSensors (compatibility version 5.1.0, current version 5.1.0)
@executable_path/../Frameworks/QtConcurrent.framework/Versions/5/QtConcurrent (compatibility version 5.1.0, current version 5.1.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 56.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
好吧终于开始工作了。 在git的snowleopard上编译Qt5(5.1.2)(xcode 4.2和10.6 sdk) 在我的情况下,只需使用这些配置:
./configure -developer-build -opensource -nomake examples -nomake tests -qt-sql-mysql
我必须在我的代码中修复小元素,使应用程序无故失败(变量名称..)然后一切正常。
不要忘记在10.6上使用mac deploy工具,应用程序在10.8上运行正常(在10.7上未经测试,但我认为这没问题。)
希望这有助于任何人。
答案 0 :(得分:2)
NSPreferredScrollerStyleDidChangeNotification通知仅在OSX 10.7及更高版本中可用,如本页底部所述:
如果MAC_OS_X_VERSION_MAX_ALLOWED> = MAC_OS_X_VERSION_10_7,Qt将有条件地编译OS X 10.7 API。参见例如:
您正在使用的Qt版本可能未使用10.6 SDK进行编译。
有一个已知问题:“要在10.6上使用Qt,你需要在10.6机器上自己构建Qt”:
答案 1 :(得分:1)
如果您使用的是Qt 5.1,这是macdeployqt的一个已知问题,它无法更正可执行文件上的链接库路径,您可以自己查看
otool -L <executable>
您可以切换回Qt 5.1.0-rc1或this thread,但是有一个解决方法可以解决问题。
答案 2 :(得分:0)
使用Qt 5在Mac OS 10.6上运行应用程序的唯一方法是使用-no-c ++参数配置Qt。编译10.6上的Qt对我来说不是一个选项,因为没有Retina支持。
正确的解决方法是:
Mac OS 10.7 + Qt 5.2.0 + xcode 4.6 +使用-no-c ++ 11参数进行配置
PS。使用Vmware和10.7编译Qt。在任何Mac OS X上开发和部署您的应用程序(10.9.1)