首先制作Release包
在Qt Creator中 Projects->Build->Build Settings中选择 Build configuration为Release模式,然后Build,会在Build directory目录中生成对应的.app文件
一般默认的保存目录是你项目所在文件的同级目录,比如
编译完成后,只需要在release目录下找到bin目录下的app文件,一般点击是可以打开运行的
第二制作.app
当前生成的.app文件还不能直接发布,因为app使用的各种依赖库并没有包含在app中,所以需要进行额外的流程将对应的依赖库打包进来
Qt自带有一个打包工具macdeployqt可以帮助实现这个目标
一般在Qt5.12.11/5.12.11/clang_64/bin目录下就有macdeployqt的脚本文件
如果不配置环境变量就直接到这个bin目录下执行
./macdeployqt 你的app文件目录 app名字.app
执行完成后会发现,之前包大小相对很小的app文件瞬间大了很多,然后运行app,看是否能正常打开,如果顺利就可以正常打开了,如果有bug请看下一步
第三解决文件丢失或者 his application failed to start because no Qt platform plugin could be initialized.的问题
如果是缺少文件,在电脑上找到对应的dylib文件,如果是第二个错误,只需要在QT的安装目录
例如/Qt5.12.11/5.12.11/clang_64/plugins/platforms
复制platforms下所有文件到app文件的(包内容下的)Contents下的Frameworks文件下
如果没有对应文件夹自己新建一个,如果少资源就放入Resource目录下即可
再次用执行
./macdeployqt 你的app文件目录 app名字.app
如果还报错循环以上步骤,直到可以正常运行;
第三制作dmg镜像
./macdeployqt 你的app文件目录 app名字.app -dmg
打包出的dmg后接下来就是将dmg文件压缩成zip包或者直接发布即可
错误解决
打包的dmg,在自己电脑上可以运行,但是发给测试后打开安装报如下错
Dyld Error Message:
dyld: Using shared cache: 4A889CE9-8D7E-304E-A5F7-84D819B0BF9C
Library not loaded: /usr/local/Cellar/nettle/3.7.2/lib/libnettle.8.dylib
Referenced from: /Volumes/:xxxxx:mac:bsconnect/bsconnect.app/Contents/Frameworks/libhogweed.6.dylib
Reason: image not found
意思是,应用需要的libnettle.8.dylib库原本是在报错的这个路径下,但是运行的时候别人电脑是没有这个路径的,所以报错了,打开Contents/Framworks的时候发现libnettle.8.dylib是在里面的,所以只需要用install_name_tool重新指定一下路径即可
install_name_tool oldpath newpath /app路径/Content/MacOS/应用名
例如:
错误显示这个libhogweed.6.dylib的库依赖了 libnettle.8.dylib
那我们用命令查看一下,如图
otool -L /Users/xxxx/Desktop/baishan/bsvpn/vpn_client/mac/bsconnect.app/Contents/Frameworks/libhogweed.6.dylib
可以看到确实引用了这个依赖库,并且路径也是报错信息上面的路径
这就好办了,只需要用install_name_tool -change命令修改他的引用路径即可
正常引用的路径应该是图示这样的 @executable_path/../Frameworks/libnettle.8.dylib
所以需要执行的命令行如下
install_name_tool -change /usr/local/Cellar/nettle/3.7.2/lib/libnettle.8.dylib @executable_path/../Frameworks/libnettle.8.dylib /Users/xxx/Desktop/baishan/bsvpn/vpn_client/mac/bsconnect.app/Contents/Frameworks/libhogweed.6.dylib
执行完之后再次用otool -l查看一下,如图
已经修改成功了,然后再次用macdeployqt工具打包,就没问题了
mac下Qt缺失libiodbc.2.dylib和libpq.5.dylib解决方案
经查询资料,libpq.5.dylib是
这玩意的一个动态链接库,于是下载安装就行了
ibiodbc.2.dylib就更好办了,如果没安装过直接:
brew install libiodbc
完事后dylib文件就在那里了