1 Linux环境
1.1 构建 Release 版本
- Projects - Add Release - 添加版本名称并确定 - Build
1.2 脚本文件
- 进入上文构建的 Release 目录
1 | vi copylib.sh |
- copylib.sh 内容如下(此处无需修改)
1 | !/bin/bash |
1. 3 生成项目的库文件
1 | chmod 777 copylib.sh |
- projectName 为项目名,我的是 Client,根据自己项目自行修改。随即在同目录生成了 lib 文件夹
- 桌面新建空文件夹,这里命名为 new
- 将上文中构建的 Release 版本的二进制文件及库文件全部复制到新建的这个 new 中来,(不保留 lib 目录,将其中文件均复制过来)
1. 4 Qt 安装目录的插件中提取 platforms
- 进入
/opt/Qt5.14.2/5.14.2/gcc_64/plugins/platforms
- 将 copylib.sh 复制到的platforms
1 | sudo ./copylib.sh libqxcb.so |
- 这会生成一个新的 lib 文件夹,将此文件夹所有文件均复制到 new 目录中,删除这个 lib 文件夹
- 遇到同名文件则跳过,将整个 platforms 复制到 new 目录中
- 在 new 目录新建与项目同名的脚本,这里是 Client.sh
1 | vi projectName.sh |
1 | !/bin/sh |
1 | chmod 777 projectName.sh |
- 到这里按说是完成了,但是执行这个 projectName.sh 时,会报错,遇到了xcb的问题,这个问题可以通过 ldd 和 Qt 的调试设置来查明
1. 5 解决 xcb 问题
- 设置环境变量,以便于看到 Qt 加载的过程,看到详细的报错信息。然后执行上文中的 projectName.sh
1 | export QT_DEBUG_PLUGINS=1 |
- 根据标准输出找问题
- 这里的问题是找不到 libQt5XcbQpa.so.5
- 可以去 Qt 安装目录的 platforms 目录找(出现 xcb 问题一般是因为以上 platforms 中执行 copylib 的顺序有问题,如果先将 platforms 复制到新目录再执行 copylib 就会缺失一部分库,因此需要在 Qt 安装目录中执行)
1. 6 移植到其他机器的注意事项
- 打包后,启动程序应该使用
projectName.sh
而不是直接运行 projectName 的二进制文件 - 执行上述 sh 文件可能会提示权限不够,这时需要给 projectName 二进制文件以及 projectName.sh 脚本 777 权限
1 | chmod 777 projectName |
1.7 Reference
2 Windows环境
2.1 构建 Release 版本
与 Linux 环境同理
2.2 windeployqt 工具拷贝库文件
新建文件夹,将 Release 目录中的 exe 文件拷贝到新文件夹下
命令行工具
- 在命令行中,进入以上新建的目录,并执行命令
windeployqt Server.exe
,其中 Server.exe 为 Release 拷过来的可执行文件
- 执行完后,文件夹中会多出很多 dll 以及其他一些依赖,Server.exe 也可以正常运行了