我有一个问题,我的应用程序在10.6 Snow Leopard上无法运行。
我使用以下参数进行编译:
qmake LSPRO.pro -r -spec macx-clang CONFIG+=release CONFIG+=x86_64
在我的项目文件中,我有以下这些元素:
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,导致应用程序在查找时崩溃。我尝试了两个解决方案:
失败的解决方案1:我使用noc++11标志重新构建了Qt5,生成的应用程序在snowleopard上启动,但无法调用外部二进制/执行命令(应用程序崩溃并显示EXC_BAD_ACCESS),尽管直接调用该二进制文件时运行正常,还有可能更多未发现的问题。
失败的解决方案2:我尝试天真地在snowleopard中包含缺失的dylibs(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 of a 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上编译了Qt5(5.1.2)在Snow Leopard上(使用带有10.6 SDK的Xcode 4.2)。 在我的情况下,只需使用以下配置即可:
./configure -developer-build -opensource -nomake examples -nomake tests -qt-sql-mysql
我不得不修复代码中的一些小问题,例如变量名等,以免应用程序无故崩溃,之后一切都正常了。
只是不要忘记在10.6上使用mac deploy工具,这样应用程序就可以在10.8上运行正常(未经10.7测试,但我认为也没问题)。
希望这能帮助到任何人。