6. 交叉编译Qt库(Docker)¶
本章将简单介绍下如何使用Docker构建编译镜像,一键交叉编译Qt。
交叉编译可能有很多问题,我们仓库提供了一些已经交叉编译好的库, 具体库文件到 网盘 下载, 使用方式参考下教程 Qt程序编译 。
6.1. Docker简介¶
Docker 是一种开源的应用容器引擎,它可以让开发者将他们的应用及依赖包打包到一个可移植的镜像中, 然后发布到任何流行的Linux或Windows操作系统的机器上。Docker的容器采用沙箱机制,相互之间不会有任何接口,从而实现了更高的安全性。 Docker可以帮助开发者快速、高效地构建和部署应用,并且可以在不同的环境中运行,例如开发环境、测试环境和生产环境。
6.1.1. 安装Docker¶
Docker的安装,参考下 https://docs.docker.com/desktop/install/windows-install/ 。
6.1.2. 配置Docker¶
构建基础的Qt模块,建议CPU核2个以上,内存4G以上,磁盘一般设置60G左右。 构建全部的Qt模块,CPU核越多越好,内存32G以上,磁盘一般设置100G左右。 如何配置配置参考下:
6.2. 构建编译镜像¶
提示
测试环境:Windows Docker Desktop,后端WSL2,为鲁班猫debian10系统交叉编译Qt5.15.8。
6.2.1. 拉取构建文件¶
打开Windows PowerShell,使用git命令获取构建文件,或者直接到 此处 下载:
git clone https://gitee.com/LubanCat/lubancat-cross-compile-qt
# 然后切换到debian10/Qt5目录
cd debian10/Qt5
6.2.2. 添加源文件¶
为鲁班猫debian10系统交叉编译Qt, 需要从 网盘 中获取相关源文件(文件在实时更新):
# 从网盘获取下面文件,放到debain10/Qt5目录下
gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
qt-everywhere-opensource-src-5.15.8.tar.xz
sysroot_debian10.tar.gz
# 此时debian10/Qt5目录下文件:
.
├── build_qt5_base.sh
├── build_qt5_eglfs.sh
├── Dockerfile
├── Dockerfile.eglfs
├── sources.list
├── sysroot_debian10.tar.gz
├── qt-everywhere-opensource-src-5.15.8.tar.xz
└── gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
Qt源码和GCC交叉编译器源码到构建的镜像中,也可以编译Qt时从网络拉取。 需要修改构建文件中的Dockerfile文件:
# 添加交叉编译器,如果注释,后面编译脚本会从网络拉取(建议手动下载添加,自动下载很慢)
ADD gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz /opt
# 添加Qt5.15.8源码,如果注释,后面编译脚本会从网络拉取
ADD qt-everywhere-opensource-src-5.15.8.tar.xz /opt
6.3. 运行容器自动交叉编译Qt¶
运行镜像前,创建一个挂载目录:
mkdir build
设置挂载目录,并运行容器:
docker run --mount src="$(pwd)/build",target=/build,type=bind building_qt
容器运行后,将自动执行编译脚本build_qt5_base.sh,交叉编译完成后,Qt库将安装在build目录下,并打包成qt-everywhere-src-5.15.8.tar.gz文件。 接下来就可以在虚拟机Qt Creator中使用刚才编译出的Qt库, 具体配置参考下前面 Qt编译章节 。
6.4. 简单编译Qt程序¶
除了在虚拟机中使用上面编译出的qt库,也可以直接利用容器交叉编译Qt程序, 使用下面命令导出前面编译Qt的容器为一个新镜像:
docker commit {containerID] built
然后运行导出的镜像:
docker run --mount src="$(pwd)/build",target=/build,type=bind -it built /bin/bash
进入终端命令行,可以使用/build/qt-everywhere-src-5.15.8/host/bin/qmake简单交叉编译下qt程序。