美文网首页QT
[QT]build release之后打包dmg和macdepl

[QT]build release之后打包dmg和macdepl

作者: _小老虎_ | 来源:发表于2020-02-02 15:05 被阅读0次

    • 通过release切换
    • 设置release输出路径
      image.png
      image.png
    • 执行build-构建
    • 到app所在目录
      • 执行macdeployqt YuvEye.app -dmg 生成dmg
      • 或者用dropdmg设计,
        • macdeployqt YuvEye.app (常用)
        • 拖到 dropdmg

    记住:dropdmg智能正常转换 *.app

    坑列表

    1. 动态库依赖坑

    acdeployqt myApp.app
    ERROR: no file at "/usr/lib/liba.dylib"

    发生在 QT界面build之后
    因为有动态库dylib依赖

    解决办法:

    otool -L YuvEye.app/Contents/MacOS/YuvEye 
    

    查看动态库指向

    YuvEye.app/Contents/MacOS/YuvEye:
        liba.dylib
    

    这个时候动态库式引导默认路径寻找,原本是/usr/local/lib
    但是:!macdeployqt不会找这个目录,所以需要我们自动定向过来

    install_name_tool -change liba.dylib /usr/local/lib/liba.dylib /xxx/YuvEye.app/Contents/MacOS/YuvEye
    

    之后就是:

    YuvEye.app/Contents/MacOS/YuvEye:
        /usr/local/lib/liba.dylib
    

    但是还不能解决问题,因为打包之后需要让他自动在保内寻找,定义绝对路径:
    deploy执行app

    macdeployqt YuvEye.app
    

    执行之后其实已经copy进来了,去寻找一下

    find ./ -name liba.dylib
    
    # 输出
    /xxx/xxx/YuvEye.app/Contents/Frameworks/libEyeReader.dylib
    

    其中/xxx/xxx/YuvEye.app/Contents/Frameworks这一层转换为变量@rpath
    最后替换相对路径

    install_name_tool -change /usr/local/lib/libEyeReader.dylib @rpath/libEyeReader.dylib 
    /xxx/YuvEye.app/Contents/MacOS/YuvEye
    

    成功:

    otool -L YuvEye.app/Contents/MacOS/YuvEye
    # 输出:
    YuvEye.app/Contents/MacOS/YuvEye:
        @rpath/liba.dylib (compatibility version 0.0.0, current version 0.0.0)
    

    其中liba.dylib内部也被替换了,所以不需要管

    otool -L .//YuvEye.app/Contents/Frameworks/liba.dylib
    输出
    .//YuvEye.app/Contents/Frameworks/liba.dylib:
        @executable_path/../Frameworks/liba.dylib (compatibility version 0.0.0, current version 0.0.0)
        @executable_path/../Frameworks/libb.dylib (compatibility version 0.0.0, current version 0.0.0)
    

    相关文章

      网友评论

        本文标题:[QT]build release之后打包dmg和macdepl

        本文链接:https://www.haomeiwen.com/subject/dnrqxhtx.html