QT

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

2020-02-02  本文已影响0人  _小老虎_

记住: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)
上一篇下一篇

猜你喜欢

热点阅读