gpt4 book ai didi

macos - Qt Mac 应用程序无法创建自包含 App Bundle (Qt Creator Build)

转载 作者:行者123 更新时间:2023-12-04 21:08:06 25 4
gpt4 key购买 nike

我正在使用 Qt Creator 3.6.1Qt 5.6.0 (Clang 7.0 (Apple), 64 bit) ,并且在尝试创建用于部署的应用程序包时遇到了一些问题。

注:应用名称为bibi

  • Qt Creator成功生成bibi.appbuild-bibi-Desktop_Qt_5_6_0_clang_64bit-Release/ 下文件夹
  • 这个bibi.app在另一台 Mac 上链接 Qt 失败
  • macdeployqt不能解决问题

  • 以下为详细内容:

    运行时出现错误截图bibi.app在另一台 Mac 上:


    otool
    > otool -L build-bibi-Desktop_Qt_5_6_0_clang_64bit-Release/bibi.app/Contents/MacOS/bibi
    build-bibi-Desktop_Qt_5_6_0_clang_64bit-Release/bibi.app/Contents/MacOS/bibi:
    @rpath/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.6.0, current version 5.6.0)
    @rpath/QtGui.framework/Versions/5/QtGui (compatibility version 5.6.0, current version 5.6.0)
    @rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.6.0, current version 5.6.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/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)

    macdeployqt
    > which macdeployqt
    /Users/<myusername>/Qt/5.6/clang_64/bin/macdeployqt
    > macdeployqt bibi.app
    > otool -L bibi.app/Contents/MacOS/bibi
    bibi.app/Contents/MacOS/bibi:
    @rpath/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.6.0, current version 5.6.0)
    @rpath/QtGui.framework/Versions/5/QtGui (compatibility version 5.6.0, current version 5.6.0)
    @rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.6.0, current version 5.6.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/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)

    树 bibi.app
    bibi.app
    ├── Contents
    │   ├── Frameworks
    │   │   ├── QtCore.framework
    │   │   │   ├── QtCore -> Versions/Current/QtCore
    │   │   │   ├── Resources -> Versions/Current/Resources
    │   │   │   └── Versions
    │   │   │   ├── 5
    │   │   │   │   ├── QtCore
    │   │   │   │   └── Resources
    │   │   │   │   └── Info.plist
    │   │   │   └── Current -> 5
    │   │   ├── QtDBus.framework
    │   │   │   ├── QtDBus -> Versions/Current/QtDBus
    │   │   │   ├── Resources -> Versions/Current/Resources
    │   │   │   └── Versions
    │   │   │   ├── 5
    │   │   │   │   ├── QtDBus
    │   │   │   │   └── Resources
    │   │   │   │   └── Info.plist
    │   │   │   └── Current -> 5
    │   │   ├── QtGui.framework
    │   │   │   ├── QtGui -> Versions/Current/QtGui
    │   │   │   ├── Resources -> Versions/Current/Resources
    │   │   │   └── Versions
    │   │   │   ├── 5
    │   │   │   │   ├── QtGui
    │   │   │   │   └── Resources
    │   │   │   │   └── Info.plist
    │   │   │   └── Current -> 5
    │   │   ├── QtPrintSupport.framework
    │   │   │   ├── QtPrintSupport -> Versions/Current/QtPrintSupport
    │   │   │   ├── Resources -> Versions/Current/Resources
    │   │   │   └── Versions
    │   │   │   ├── 5
    │   │   │   │   ├── QtPrintSupport
    │   │   │   │   └── Resources
    │   │   │   │   └── Info.plist
    │   │   │   └── Current -> 5
    │   │   └── QtWidgets.framework
    │   │   ├── QtWidgets -> Versions/Current/QtWidgets
    │   │   ├── Resources -> Versions/Current/Resources
    │   │   └── Versions
    │   │   ├── 5
    │   │   │   ├── QtWidgets
    │   │   │   └── Resources
    │   │   │   └── Info.plist
    │   │   └── Current -> 5
    │   ├── Info.plist
    │   ├── MacOS
    │   │   └── bibi
    │   ├── PkgInfo
    │   ├── PlugIns
    │   │   ├── imageformats
    │   │   │   ├── libqdds.dylib
    │   │   │   ├── libqgif.dylib
    │   │   │   ├── libqicns.dylib
    │   │   │   ├── libqico.dylib
    │   │   │   ├── libqjpeg.dylib
    │   │   │   ├── libqtga.dylib
    │   │   │   ├── libqtiff.dylib
    │   │   │   ├── libqwbmp.dylib
    │   │   │   └── libqwebp.dylib
    │   │   ├── platforms
    │   │   │   └── libqcocoa.dylib
    │   │   └── printsupport
    │   │   └── libcocoaprintersupport.dylib
    │   └── Resources
    │   ├── empty.lproj
    │   └── qt.conf
    └── Icon\r

    38 directories, 32 files

    谢谢。

    问题解决了

    谢谢scott,问题解决了。以下是我未能成功创建自包含应用程序包的原因:
  • otool -L没有解决@rpath,我很困惑,因为它总是返回相同的输出
  • 缺少测试捆绑包是否已经包含所有框架的方法

  • 简而言之,问题可以通过使用 Scott 的 otool-rpath 来解决。 , lsof , 或设置 DYLD_PRINT_LIBRARIESDYLD_PRINT_TO_FILE .而且,我已经写了一个详细的注释 here .

    最佳答案

    假设您使用了 qt-unified-max-x64-online.dmg安装程序并将 Qt 安装到 $HOME/Qt .您可以使用以下方式构建项目:

    cd MY-QT-PROJECT
    QT_BIN_DIR=$HOME/Qt/5.6/clang_64/bin
    make clean
    $QT_BIN_DIR/qmake -config release
    make -j$(getconf NPROCESSORS_ONLN)

    这会创建一个应用程序包,但它不会在普通用户的机器上运行。

    查看包中隐藏的 Mach-O 可执行文件中的 RPATH:
    otool-rpath ./*.app/Contents/MacOS/*
    /Users/user/Qt/5.6/clang_64/lib

    我正在使用小型 otool-rpath出于说明目的,我在这里编写了自己的脚本。

    该 RPATH 加上您的 otool -L 中列出的安装名称上面的输出使动态链接器, dyld ,在 /Users/user/Qt/5.6/clang_64/lib 下查找 Qt 框架.因此,它不适用于未在同一位置安装 Qt 的用户。

    要改变它,运行 Qt 的 macdeployqt工具:
    $QT_BIN_DIR/macdeployqt ./*.app -verbose=3 -always-overwrite -appstore-compliant

    查看示例 macdeployqt日志 here .
    macdeployqt创建自包含的应用程序包。观察可执行文件中的 RPATH 如何从 /Users/user/Qt/5.6/clang_64/lib 更改至 @executable_path/../Frameworks :
    otool-rpath ./*.app/Contents/MacOS/*
    @executable_path/../Frameworks
    @executable_path做显而易见的事情并被 dyld 扩展至 bibi.app/Contents/MacOS在运行时。可执行文件中的 RPATH 和安装名称一起使捆绑包内的动态链接在运行时工作。

    延伸阅读
  • 您可以通过设置 DYLD_PRINT_LIBRARIES 来获取动态链接器如何查找库的日志。和 DYLD_PRINT_TO_FILE . Example log .见 dyld(1) .
  • 您可以使用 lsof -p $PID | grep QtCore检查您的应用在运行时实际使用的框架副本。 Example log .
  • Run-Path Dependent Libraries
  • @executable path, @load path and @rpath

  • 引用
  • Mac Developer Library: Mach-O Programming Topics
  • OSX ABI Mach-O File Format Reference

  • 关键字:“ RPATH ”、“ 安装名称 ”、“ Mach-O 动态链接 ”。

    请注意 路径 在 ELF 中具有微妙不同的语义。

    关于macos - Qt Mac 应用程序无法创建自包含 App Bundle (Qt Creator Build),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36939094/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com