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 を再構築すると、アプリは Snowleopard で起動しますが、Qwebkit にないいくつかの内部要素 Videoplayer に失敗し、外部バイナリの /execute コマンドを呼び出すことができません (アプリは 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

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から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 展開ツールを使用することを忘れないでください。アプリは 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 に答える
0

Qt 5 を搭載した Mac OS 10.6 でアプリケーションを実行する唯一の方法は、-no-c++ パラメータを使用して Qt を構成することです。Retina サポートがないため、10.6 で Qt をコンパイルすることはできません。

正しい回避策は次のとおりです。

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 に答える