Qt 5 не может развернуться на SnowLeopard



У меня есть проблема, когда мое приложение не работает на 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.6 из чистого Qt5 в 10.8?





Обновление 1:



Благодаря комментариям, похоже, что 10.6 еще не поставляется с поддержкой c++11, что приводит к сбою приложения при его поиске. Я попробовал 2 решения:



Неудачное решение 1 : я перестраиваю Qt5 с флагом noc++11, в результате приложение запускается на snowleopard, но не удается некоторые внутренние элементы Видеоплеер отсутствует в Qwebkit, не удается вызвать внешний двоичный файл / выполнить команду (приложение вылетает с EXC_BAD_ACCESS), хотя двоичный файл просто работает нормально при вызове напрямую и, вероятно, еще больше нераскрытых.



Неудачное решение 2 : я наивно попытался включить отсутствующие dylibs (libc++.1.dylib и libc++abi.dylib) в snowleopard, но приложение все равно вылетает с сообщением:



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



@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)




Решение:



ОК, наконец, получил его на работу.
Скомпилированный Qt5 (5.1.2) на snowleopard от git (есть xcode 4.2 с 10.6 sdk)
в моем случае просто с этими конфигурациями:



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


Я должен был исправить мелкие элементы в моем коде, делающем приложение аварийно завершающим работу без причины (имена переменных..) и тогда все было в порядке.



Просто не забудьте использовать Mac deploy tool на 10.6, и приложение работает нормально на 10.8 (непроверено на 10.7, но я предполагаю, что это нормально.)



Надеюсь, что это помогает любому.

646   3  

3 ответов:

Уведомление NSPreferredScrollerStyleDidChangenotification доступно только в OSX 10.7 и более поздних версиях, как указано в нижней части этой страницы:

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

Qt будет условно компилировать API OS X 10.7, если MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7. Видеть например:

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

Возможно, версия Qt, которую вы используете, не была скомпилирована с SDK 10.6.

Существует известная проблема: "чтобы использовать Qt на или для 10.6, вам нужно построить Qt самостоятельно на машине 10.6":

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

Если вы используете Qt 5.1, это известная проблема с macdeployqt, он не исправляет связанные пути библиотеки в исполняемом файле, вы можете увидеть это самостоятельно с помощью

otool -L <executable>

Вы можете либо переключиться обратно на Qt 5.1.0-rc1, либо в этом потоке есть обходной путь со скриптом, который исправит проблему для вас.

Единственный способ запустить приложение на Mac OS 10.6 с Qt 5-это настроить Qt с параметром-no-c++. Компиляция Qt на 10.6 для меня не вариант, потому что не было бы поддержки Retina.

Правильный обходной путь:

Mac OS 10.7 + Qt 5.2.0 + xcode 4.6 + configure with-no-c++11 parameter

ПС. Используйте Vmware с 10.7 для компиляции Qt. Разработка и развертывание приложения на любом компьютере Mac OS X (10.9.1)

Comments

    Ничего не найдено.