У меня проблема с тем, что мое приложение не работает на 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?
Благодаря комментариям, похоже, что 10.6 еще не поставляется с поддержкой c ++ 11, что приводит к сбою приложения при поиске. Я пробовал 2 решения:
Неудачное решение1 : Я перестраиваю Qt5 с флагом noc ++ 11, результирующее приложение запускается на snowleopard, но не может работать с некоторыми внутренними элементами Videoplayer, отсутствующий в Qwebkit, не может вызвать внешнюю команду binary / execute (приложение аварийно завершает работу с 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
@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) на снежном барде из git (есть xcode 4.2 с 10.6 sdk)
в моем случае просто с этим конфигом:
./configure -developer-build -opensource -nomake examples -nomake tests -qt-sql-mysql
Мне пришлось исправить небольшие элементы в моем коде, чтобы приложение без сбоев (имена переменных ..), а затем все было в порядке.
Только не забудьте использовать инструмент развертывания Mac на 10.6, и приложение работает нормально на 10.8 (не проверено на 10.7, но я предполагаю, что это нормально.)
Надеюсь, это кому-нибудь поможет.
Уведомление NSPreferredScrollerStyleDidChangeNotification доступно только в OSX 10.7 и более поздних версиях, как указано в нижней части этой страницы:
Qt условно скомпилирует API OS X 10.7, если MAC_OS_X_VERSION_MAX_ALLOWED> = MAC_OS_X_VERSION_10_7. Смотрите, например:
Возможно, используемая вами версия Qt не была скомпилирована с 10.6 SDK.
Существует известная проблема: «Чтобы использовать Qt на или для 10.6, вам нужно собрать Qt самостоятельно на машине с 10.6»:
Если вы используете 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 + настроить с параметром -no-c ++ 11
PS. Используйте Vmware с 10.7 для компиляции Qt. Разработка и развертывание приложения на любой Mac OS X (10.9.1)