[QT]build release之后打包dmg和macdepl
2020-02-02 本文已影响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)