Qt 5无法在SnowLeopard上部署

时间:2013-08-10 10:22:16

标签: c++ qt osx-snow-leopard osx-mountain-lion qt5

我有一个问题,我的应用程序无法在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?


更新1:

感谢评论,看起来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

otool -L 5.1.0 rc1 build

@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上未经测试,但我认为这没问题。)

希望这有助于任何人。

3 个答案:

答案 0 :(得分:2)

NSPreferredScrollerStyleDidChangeNotification通知仅在OSX 10.7及更高版本中可用,如本页底部所述:

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSScroller_Class/Reference/Reference.html

如果MAC_OS_X_VERSION_MAX_ALLOWED> = MAC_OS_X_VERSION_10_7,Qt将有条件地编译OS X 10.7 API。参见例如:

http://qt.gitorious.org/qt/qtbase/blobs/b9826799405293ee5969015eed37957daad198ee/src/widgets/styles/qmacstyle_mac.mm

您正在使用的Qt版本可能未使用10.6 SDK进行编译。

有一个已知问题:“要在10.6上使用Qt,你需要在10.6机器上自己构建Qt”:

http://qt-project.org/wiki/Qt500KnownIssues

答案 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)