6

我有一个问题,我的应用程序无法在 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 world 或示例文件,它也不起作用......

我使用 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 支持,导致应用程序在寻找它时崩溃。我尝试了 2 个解决方案:

失败的解决方案1:我用 noc++11 标志重建 Qt5,生成的应用程序在雪豹上启动,但在 Qwebkit 中缺少一些内部元素 Videoplayer 失败,无法调用外部二进制/执行命令(应用程序因 EXC_BAD_ACCESS 而崩溃)虽然二进制运行良好当直接调用并且可能更未被发现时。

失败的解决方案2:我天真地尝试在雪豹中包含缺少的 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

5.1.0 rc1 构建的 otool -L

@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 在雪豹上编译 Qt5(5.1.2)(具有 xcode 4.2 和 10.6 sdk):

./configure -developer-build -opensource -nomake examples -nomake tests -qt-sql-mysql

我不得不修复代码中的小元素,导致应用程序无故崩溃(变量名......),然后一切正常。

只是不要忘记在 10.6 上使用 mac 部署工具,并且应用程序在 10.8 上运行正常(在 10.7 上未经测试,但我认为这没问题。)

希望这对任何人都有帮助。

4

3 回答 3

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

于 2013-08-13T15:11:09.173 回答
1

如果您使用的是 Qt 5.1,这是 macdeployqt 的一个已知问题,它不会更正可执行文件上的链接库路径,您可以自己查看

otool -L <executable>

您可以切换回 Qt 5.1.0-rc1,或者在这个线程中有一个解决方法,其中有一个脚本可以为您解决问题。

于 2013-08-13T07:44:54.603 回答
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。使用 10.7 的 Vmware 编译 Qt。在任何 Mac OS X (10.9.1) 上开发和部署您的应用程序

于 2014-02-08T08:41:22.223 回答