大家好,这里Aaron。最近在和荣耀做音频易Studio的适配工作遇到了一个需求,需要基于Ubuntu 22.04版本编译软件的ARM64 deb包。我的软件是基于开源Qt的产品,刚开始也是想都没想去VMWare装了个Ubuntu 26.04版本,编译出来反馈Ubuntu版本太高需要降版本。搜遍Ubuntu官网只找到ARM的服务器版本22.04,这个时候去翻了一下Docker发现有22.04镜像,于是利用1panel代理加速把22.04包拉下来了。

启动Docker容器

启动镜像可以通过以下命令直接打开bash命令行:

docker run -it --rm -v "/Users/XXXX/Desktop/Workspace/audioeasestudio:/workspace" -w /workspace audioeasestudio-dev:latest bash

因为Docker容器是无状态的,每次重启镜像都会清空里面的所有依赖,所以自己写了个Dockerfile,可以供大家参考。

Dockerfile

FROM docker.1panel.live/library/ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive

# Switch to Tsinghua apt mirror (using http to avoid SSL issues in base image)
RUN sed -i 's|http://ports.ubuntu.com/ubuntu-ports|http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports|g' /etc/apt/sources.list && \
    apt-get update && \
    apt-get install -y --no-install-recommends \
        ca-certificates \
        wget \
        gnupg \
        build-essential \
        cmake \
        ninja-build \
        libgl1-mesa-dev \
        libglu1-mesa-dev \
        libxkbcommon-x11-dev \
        libxcb-cursor-dev \
        libxcb-icccm4-dev \
        libxcb-image0-dev \
        libxcb-keysyms1-dev \
        libxcb-randr0-dev \
        libxcb-shape0-dev \
        libxcb-shm0-dev \
        libxcb-sync-dev \
        libxcb-util-dev \
        libxcb-xfixes0-dev \
        libxcb-xinerama0-dev \
        libxcb-xkb-dev \
        libxcb-dri3-dev \
        libx11-xcb-dev \
        libxcb-dri2-0-dev \
        libxcb-glx0-dev \
        libxcb-present-dev \
        libxcb-composite0-dev \
        libxcb-ewmh-dev \
        libxcb-res0-dev \
        libfontconfig1-dev \
        libfreetype6-dev \
        libdbus-1-dev \
        libssl-dev \
        libpulse-dev \
        libasound2-dev \
        libjack-jackd2-dev \
        libpipewire-0.3-dev \
        libsndfile1-dev \
        libflac-dev \
        libmp3lame-dev \
        libvorbis-dev \
        libogg-dev \
        libopus-dev \
        libsamplerate0-dev \
        libsqlite3-dev \
        libsystemd-dev \
        libudev-dev \
        libinput-dev \
        libts-dev \
        libmtdev-dev \
        libjpeg-dev \
        libpng-dev \
        libtiff-dev \
        libwebp-dev \
        libharfbuzz-dev \
        libpcre2-dev \
        libdouble-conversion-dev \
        libmd4c-dev \
        pkg-config \
        git \
        ccache \
        clang \
        lld \
        llvm \
        gdb \
        valgrind \
    && \
    apt-get install -y --no-install-recommends \
        qt6-base-dev \
        qt6-base-dev-tools \
        qt6-tools-dev \
        qt6-tools-dev-tools \
        qt6-l10n-tools \
        libqt6opengl6-dev \
        qt6-multimedia-dev \
        libqt6svg6-dev \
        qt6-wayland \
        libqt6sql6-sqlite \
    && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

CMD ["/bin/bash"]

配置Qt Creator连接Docker

Docker环境配完了,下一步就是如何把Qt Creator连接上容器。巧的是Qt Creator中有Docker插件,可以通过Qt Creator连接Docker镜像。

步骤1:启用Docker插件

在Qt Creator中,进入 关于插件 搜索 Docker 并勾选,然后点击确定。

步骤2:添加Docker设备

在 首选项 -> 设备 中选择添加 Docker Device,选择自己的Docker容器。

配置完成后选择Docker容器,划到最下面选择 Auto Detect Kit Items 检测容器的qmake。

步骤3:验证配置

如果正常的话这时候在项目选项卡中应该是没有红色感叹号的。如果有,可以在bash中输入以下命令检测qmake是否已安装:

which qmake

如果没有输出,需要重新安装Qt依赖。

步骤4:构建项目

配置完成后直接构建即可构建linux目录。

步骤5:生成DEB包

最后可以通过以下命令生成deb包:

docker run --rm -v "/Users/XXX/Desktop/Workspace/audioeasestudio:/workspace" -w /workspace audioeasestudio-dev:latest bash -c "cd build && cpack -G DEB 2>&1"

更多推荐