You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在macOS上使用QML构建应用?Qt5.15.2打包出现otool解析错误如何解决

macOS QML应用构建otool输出解析错误解决

错误日志

构建时抛出如下错误:

Could not parse otool output: "/Users/test/qt/dev/projects/TestProject/build-rproxychecker2-Desktop_Qt_5_15_2_clang_64bit-Debug/debug/ch2.app/Contents/Resources/qml/QtQml/Models.2/libmodelsplugin.dylib.dSYM/Contents/Resources/DWARF/libmodelsplugin.dylib:
"
Could not parse otool output: "/Users/test/qt/dev/projects/TestProject/build-rproxychecker2-Desktop_Qt_5_15_2_clang_64bit-Debug/debug/ch2.app/Contents/Resources/qml/QtQml/StateMachine/libqtqmlstatemachine.dylib.dSYM/Contents/Resources/DWARF/libqtqmlstatemachine.dylib:
"
Could not parse otool output: "/Users/test/qt/dev/projects/TestProject/build-rproxychecker2-Desktop_Qt_5_15_2_clang_64bit-Debug/debug/ch2.app/Contents/Resources/qml/QtQml/StateMachine/libqtqmlstatemachine.dylib.dSYM/Contents/Resources/DWARF/libqtqmlremoteobjects.dylib:
"
Could not parse otool output: "/Users/test/qt/dev/projects/TestProject/build-rproxychecker2-Desktop_Qt_5_15_2_clang_64bit-Debug/debug/ch2.app/Contents/Resources/qml/QtQml/StateMachine/libqtqmlstatemachine.dylib.dSYM/Contents/Resources/DWARF/libqmlplugin.dylib:
"
...
        "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: string table not at the end of the file (can't be processed) in file:/Users/test/qt/dev/projects/TestProject/buildrproxychecker2Desktop_Qt_5_15_2_clang_64bitDebug/debug/ch2.app/Contents/Resources/qml/QtQml/Models.2/libmodelsplugin.dylib.dSYM/Contents/Resources/DWARF/libmodelsplugin.dylib
" 
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: string table not at the end of the file (can't be processed) in file:/Users/test/qt/dev/projects/TestProject/buildrproxychecker2Desktop_Qt_5_15_2_clang_64bitDebug/debug/ch2.app/Contents/Resources/qml/QtQml/Models.2/libmodelsplugin.dylib.dSYM/Contents/Resources/DWARF/libqtqmlstatemachine.dylib
" 
...

环境信息

  • Qt 5.15.2
  • Xcode 10.3
  • QtCreator 5.0

原有工程配置

.pro文件核心配置如下:

QT += core gui network sql quickwidgets quick quickcontrols2 
...
lupdate_only {
    SOURCES += qml
}
...
macdeployqt $${DESTDIR}/$${TARGET}.app -qmldir=$${PWD}/qml -always-overwrite;

已尝试操作

参考官方问题单QTBUG-57265方案,去掉-always-overwrite参数调用macdeployqt,问题未解决。

根因说明

该错误是macdeployqt的逻辑缺陷导致:工具会错误将.app包内qml目录下的.dSYM调试符号文件夹内的DWARF格式文件识别为需要处理的动态库,该类文件不是标准可执行动态库,因此otool和install_name_tool均无法解析处理。

解决方案

可根据使用场景选择以下任意一种方案:

  1. 临时手动处理
    构建完成后先删除.app包内所有.dSYM目录,再手动执行macdeployqt命令。
  2. 自动化工程配置
    在.pro文件中修改macdeployqt相关配置,执行部署前先自动删除冗余的dSYM文件:
macx {
    # 先删除app包内qml目录下的所有dSYM调试文件
    QMAKE_POST_LINK += && rm -rf $${DESTDIR}/$${TARGET}.app/Contents/Resources/qml/**/*.dSYM
    # 再执行部署命令
    QMAKE_POST_LINK += && macdeployqt $${DESTDIR}/$${TARGET}.app -qmldir=$${PWD}/qml -always-overwrite
}
  1. 关闭调试符号生成(仅适合发布场景)
    如果只需要构建发布版本,可关闭调试符号生成,从根源避免dSYM文件生成:
CONFIG += release
QMAKE_CFLAGS_RELEASE -= -g
QMAKE_CXXFLAGS_RELEASE -= -g

内容的提问来源于stack exchange,提问作者Konstantin Sautkin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:36:01