在Docker里使用Qt6 Qml

1. 使用目的

  • 在ubuntu 22.04上编译的Qt6 Qml项目使用的glibc版本比较新,本身的项目代码没有涉及到新的系统固件的东西,但是手动降低glibc版本又比较烦琐,所以基于docker制作部署脚本
  • 本文只描述如何在Docker里安装qt6 qml
  • 如果想参考项目打包和部署,可以看这个仓库https://gitee.com/aprogrotess/qt6-auto-deploy-docker/tree/master

2. 项目参考

  • https://github.com/state-of-the-art/qt6-docker

3. 注意事项

  • 在按照步骤4打包好docker后,需要/bin/bash进入容器后, export环境变量
  • 加入bin是为了编译qml的语言相关内容,lib_path则是动态库位置
export PATH=$PATH:/opt/Qt/6.6.3/gcc_64/bin
export LD_LIBRARY_PATH=/opt/Qt/6.6.3/gcc_64/lib:/usr/lib/x86_64-linux-gnu

4. docker相关文件

Dockerfile:

# Image: stateoftheartio/qt6:6.6-gcc-aqt

FROM ubuntu:20.04
MAINTAINER State Of The Art <docker@state-of-the-art.io> (@stateoftheartio)

# PIP requirement like "aqtinstall==2.0.6" or url with egg file
ARG AQT_VERSION="aqtinstall==3.1.7"

ARG QT_VERSION=6.6.3
ARG QT_PATH=/opt/Qt

ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates build-essential curl python3 locales patchelf"

ENV DEBIAN_FRONTEND=noninteractive \
    DEBCONF_NONINTERACTIVE_SEEN=true \
    QT_VERSION=${QT_VERSION} \
    AQT_VERSION=${AQT_VERSION} \
    QT_PATH=${QT_PATH} \
    QT_GCC=${QT_PATH}/${QT_VERSION}/gcc_64 \
    PATH=${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/gcc_64/bin:$PATH

COPY get_qt.sh install_packages.sh /tmp/

# Get Qt binaries with aqt
RUN /tmp/get_qt.sh

# Install the required packages
RUN /tmp/install_packages.sh

# Reconfigure locale
# RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales
ENV LANG C.UTF-8

get_qt.sh:

#!/bin/sh -xe
# Script to install Qt 6 in docker container

[ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall
[ "$QT_VERSION" ] || exit 1

[ "$QT_PATH" ] || QT_PATH=/opt/Qt

root_dir=$PWD
[ "$root_dir" != '/' ] || root_dir=""

# Init the package system
apt update

echo
echo '--> Save the original installed packages list'
echo

dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst

echo
echo '--> Install the required packages to install Qt'
echo

apt install -y git python3-pip libglib2.0-0
pip3 install --no-cache-dir "$AQT_VERSION" -i https://mirror.baidu.com/pypi/simple

echo
echo '--> Download & install the Qt library using aqt'
echo

aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" gcc_64 -m all
aqt install-tool -O "$QT_PATH" linux desktop tools_cmake
aqt install-tool -O "$QT_PATH" linux desktop tools_ninja

install_packages.sh

#!/bin/sh -xe

[ "$QT_PATH" ] || QT_PATH=/opt/Qt

[ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build'

# Init package system
apt update

echo
echo '--> Locating the shared libs required for the installed tools'
echo

find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \
    grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst

echo
echo '--> Locating packages to provide the required shared libs'
echo

apt install -y apt-file
apt-file update

while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst

# TODO: Clean apt-file cache

apt autoremove -y --purge apt-file

echo
echo '--> Install the found libraries'
echo

cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES

# Complete the cleaning

#apt -qq clean
#rm -rf /var/lib/apt/lists/*
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值