源码下载

Qt 官方源码下载(原生BUG)

KDE源码下载(维护改进)

由于Qt 5.15.3 LTS Qt官方已不再维护,且其源码存在BUG、依赖的部分第三方不再维护甚至撤销,如定位。KDE仓库中对该版本存在的问题进行了修复。因此建议使用KDE维护的Qt 5.15.3版本源码
# 克隆
git clone https://invent.kde.org/qt/qt/qt5.git -b kde/5.15
cd qt5 

# 初始化
./init-repository

# 初始化并同步所有子模块
git submodule update --init --recursive

# 检查子模块状态
# 若输出子模块项前携带'-'',表示改子模块未正常初始化或同步, 则可以执行反复执行:
# ./init-repository -f 或 git submodule update --init --recursive
# 直至子模块状态查询时输出不带'-'
git submodule status

# 切换主模块至TAG v5.15.3-lts-lgpl , 注: 不同仓库的TAG名格式不一定相同,主要关注实际仓库中的版本和LGPL协议来判断应当使用的TAG名
git submodule foreach 'git fetch --tags'
git submodule foreach 'git checkout v5.15.3-lts-lgpl || echo "No tag v5.15.3-lts-lgpl for $name"'

编译构建环境

编译内存问题

# 创建一个足够大的SWAP, 如16GB
sudo swapoff -a
sudo fallocate -l 16G /swapfile

# 设置权限, 否则系统拒绝使用
sudo chmod 600 /swapfile

# 格式化为SWAP
sudo mkswap /swapfile

# 启用
sudo swapon /swapfile

# 检查是否生效
free -h

# 若希望重启操作系统后新增SWAP仍然生效,则编辑/etc/fstab, 加上这一行
/swapfile none swap sw 0 0

# 临时减少 Swap 使用频率(强烈建议):
sudo sysctl vm.swappiness=10

# 若希望减少SWAP使用频率配置永久生效, 则
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf

基础构建工具

sudo apt-get install -y build-essential perl python3 git ninja-build flex bison gperf pkg-config

X11、XCB全家桶

sudo apt-get install -y \
    libxcb1 libxcb1-dev \
    libxcb-util1 libxcb-util-dev \
    libxcb-keysyms1 libxcb-keysyms1-dev \
    libxcb-image0 libxcb-image0-dev \
    libxcb-icccm4 libxcb-icccm4-dev \
    libxcb-render-util0 libxcb-render-util0-dev \
    libxcb-xinerama0 libxcb-xinerama0-dev \
    libxcb-cursor0 libxcb-cursor-dev \
    libxcb-xkb1 libxcb-xkb-dev \
    libxcb-xinput-dev \
    libxxf86vm-dev \
    libzstd-dev \
    libxkbcommon-dev libxkbcommon-x11-dev \
    libx11-dev \
    libxrender-dev libxrandr-dev libxtst-dev libxss-dev \
    libxi-dev \
    libx11-xcb-dev \
    libxext-dev libxfixes-dev libxi-dev \
    libxcb-xfixes0-dev \
    libxcb-util0-dev \
    libxcb-shape0-dev \
    libxcb-shm0-dev \
    libxcb-sync-dev \
    libxcb-randr0-dev \
    libudev-dev libevdev-dev \
    libxkbfile-dev \ 
    libxkbcommon-devsudo \
    libxcursor-dev \
    libinput-dev \
    libmtdev-dev \
    wayland-protocols \
    libwayland-dev \
    libwayland-egl-backend-dev
或直接使用通配符
sudo apt-get install -y \
    libxcb* \
    libx11*

图形、字体格式依赖

sudo apt-get install -y  \
    libfontconfig1-dev \
    libfreetype-dev \
    libpng-dev \
    libjpeg-dev \
    libglib2.0-dev \
    libdbus-1-dev \
    libicu-dev \
    libssl-dev \
    mesa-common-dev \
    libglu1-mesa-dev \
    libgtk2.0-dev \
    libgtk-3-dev \
    zlib1g-dev \
    libharfbuzz-dev \
    freeglut3-dev

蓝牙

sudo apt-get install -y \
    libdbus-1-dev \
    libbluetooth-dev

串口

sudo apt-get install -y libserialport-dev

WebSocket

sudo apt-get install -y libwebsockets-dev

Positioning

sudo apt-get install -y \
    libgps-dev \
    gpsd \
    gpsd-clients 
# sudo apt-get install -y qtbase5-private-dev
# sudo apt-get install -y libqt5positioning5-dev
sudo apt-get install -y \
    geoip-bin \
    geoip-database \
    geoip-database-contrib \
    geoclue-2.0 \
    libgeoclue-2-dev

安装QLocation依赖

clip2tri

使用Qt自带源码副本
# 相对路径: qtlocation/src/3rdparty
cd qt-everywhere-src-5.15.3/qtlocation/src/3rdparty/clip2tri
qmake && make -j$(nproc) && sudo make install
apt安装
源码编译

poly2tri

使用Qt自带源码副本

apt安装

sudo add-apt-repository universe
sudo apt-get update -y
sudo apt-get install -y libpoly2tri-dev
源码编译
git clone https://github.com/r3mi/poly2tri.js.git

clipper

apt安装
sudo add-apt-repository universe
sudo apt-get update -y
sudo apt-get install -y libclipper-dev
源码编译
wget http://sourceforge.net/projects/polyclipping/files/clipper_6.4.2.zip
unzip clipper_6.4.2.zip
cd clipper_6.4.2/cpp
g++ -shared -fPIC -o libclipper.so clipper.cpp
sudo cp libclipper.so /usr/local/lib/
sudo cp clipper.hpp /usr/local/include/

安装QDoc依赖

sudo apt-get install -y libclang-dev llvm

# 查看 LLVM 的可执行程序路径
which llvm-config
llvm-config --version

# 将 LLVM 的可执行路径导出到环境变量 PATH
# 根据实际路径调整
export PATH=/usr/lib/llvm-20/bin:$PATH

安装QWebEngine、QPdf、QDoc 依赖Python2

若环境支持Python2安装,则无需下载源码进行编译安装。
# 找个目录下载 Python2 的源码, 使用源码编译安装
cd ~/cache

wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz
tar xf Python-2.7.18.tgz
cd Python-2.7.18
./configure --prefix=$HOME/opt/python2
make -j$(nproc)
make install

# 将 Python2 的安装路径导出到 PATH, 并设置 PYTHON 为 python2
export PATH=$HOME/opt/python2/bin:$PATH
export PYTHON=python2

安装QPdf依赖

sudo apt-get install -y \
    libmysqlclient-dev \
    libsrtp2-dev

安装OpenGL、Mesa

sudo apt-get install -y \
    mesa-common-dev \
    libglu1-mesa-dev \
    libgl1-mesa-dev \
    libegl1-mesa-dev

安装QWebEngine(Chromium)依赖

sudo apt-get install -y \
    libnss3-dev libatk1.0-dev libatk-bridge2.0-dev libcups2-dev \
    libdrm-dev libgbm-dev libxcomposite-dev libxdamage-dev \
    libxshmfence-dev libasound2-dev libpulse-dev \
    nodejs \
    npm \
    libpci-dev \
    gyp \
    libwebp \
    libjsoncpp-dev \
    libopus-dev \
    libminizip-dev \
    libavutil-dev \
    libavformat-dev \
    libavcodec-dev \
    libevent-dev \
    libvpx-dev \
    libsnappy-dev \
    libre2-dev \
    libprotobuf-dev \
    protobuf-compiler \
    protobuf-compile \
    python3 python3-dev python3-setuptools python3-pip

安装Quick3D依赖Assimp

若环境支持安装, 则不需要从源码编译
# 下载源码
git clone https://github.com/assimp/assimp.git
cd assimp

git checkout v4.1.0
mkdir build && cd build

# 不指定安装路径, 默认安装/usr/local下
cmake .
make -j$(nproc)

sudo make install

安装其他组件

sudo apt-get install -y \
    gstreamer1.0-tools \
    gstreamer1.0-plugins-base \
    gstreamer1.0-plugins-good \
    gstreamer1.0-plugins-bad \
    gstreamer1.0-plugins-ugly \
    gstreamer1.0-libav \
    libgstreamer1.0-dev \
    libgstreamer-plugins-base1.0-dev \
    libdbus-1-dev dbus dbus-tests libdbus-glib-1-dev

OpenSSL源码编译(选)

OpenSSL可以选择安装libssl-dev或从源码编译安装
cd ~/cache/qt5
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar xf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w

./config --prefix=$HOME/qt-deps/openssl no-shared
make -j$(nproc)
make install_sw

ICU源码编译(选)

ICU可选择安装libicu-dev或从源码编译
cd ~/cache/qt5
wget https://github.com/unicode-org/icu/releases/download/release-73-2/icu4c-73_2-src.tgz
tar xf icu4c-73_2-src.tgz
cd icu/source

./configure --prefix=$HOME/qt-deps/icu
make -j$(nproc)
make install

libproxy源码编译(选)

libproxy可选择安装sudo apt-get install -y libproxy-de,或从源码编译
cd ~/cache/qt5
git clone https://github.com/libproxy/libproxy.git
cd libproxy

mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/qt-deps/libproxy
make -j$(nproc)
make install

GStreamer 源码编译(选)

GStreamer可选择安装或从源码编译
cd ~/cache/qt5

git clone https://gitlab.freedesktop.org/gstreamer/gstreamer.git
cd gstreamer
git checkout 1.20.6   # Ubuntu 22.04 对应版本

meson setup builddir --prefix=$HOME/qt-deps/gstreamer -Dbuildtype=release
ninja -C builddir
ninja -C builddir install

编译安装

当前版本支持指定debug-and-release,故分次进行release与debug版本的编译,两次编译指定相同的安装路径,则debug和relase共存为一份。
mkdir build && cd build

release

# 删除build下前次数据
# -force-debug-info 指定release携带debug信息
rm -rf ./*

# 配置编译
../configure \
    -opensource -confirm-license \
    -prefix ~/opt/qt/qt/qt-5.15.3 \
    -release \
    -force-debug-info \
    -separate-debug-info \
    -nomake tests \
    -nomake examples \
    \ #使用Qt自带副本, 而不使用系统版本
    -qt-zlib \
    -qt-libpng \
    -qt-libjpeg \
    -qt-freetype \
    -qt-harfbuzz \
    -qt-pcre \
    -qt-doubleconversion \
    -qt-xkbcommon \
    -qt-xcb \
    -qt-sqlite \
    -qt-md4c \
    -qt-hunspell \
    # 指定系统assimp的头文件与库路径
    -qt-assimp #-I/opt/assimp-4.1/include -L/opt/assimp-4.1/lib\
    \
    -dbus-linked \
    -glib \
    -pulseaudio \
    -alsa \
    -icu \
    -openssl-linked \
    -gstreamer 1.0 \
    -cups \
    \
    -opengl desktop \
    -qpa xcb \
    -xkbcommon \
    -feature-egl \
    -feature-system-proxies \
    -libproxy \
    -gtkstyle \
    -feature-wayland_client \
    -webengine-proprietary-codecs -webengine-ffmpeg \
    -feature-webengine-spellchecker \
       \
    -sse2 -sse3 -ssse3 \
    -avx -avx2 \
    -f16c \
    -v
    
# 请注意configure完成后的提示,使用gmake进行编译与安装,不要使用make
gmake -j$(nproc)

gmake install

debug

# 删除build下前次数据
rm -rf ./*

# 配置编译
../configure \
    -opensource -confirm-license \
    -prefix ~/opt/qt/qt/qt-5.15.3 \
    -release \
    -force-debug-info \
    -separate-debug-info \
    -nomake tests \
    -nomake examples \
    \ #使用Qt自带副本, 而不使用系统版本
    -qt-zlib \
    -qt-libpng \
    -qt-libjpeg \
    -qt-freetype \
    -qt-harfbuzz \
    -qt-pcre \
    -qt-doubleconversion \
    -qt-xkbcommon \
    -qt-xcb \
    -qt-sqlite \
    -qt-md4c \
    -qt-hunspell \
    # 指定系统assimp的头文件与库路径
    -qt-assimp #-I/opt/assimp-4.1/include -L/opt/assimp-4.1/lib\
    \
    -dbus-linked \
    -glib \
    -pulseaudio \
    -alsa \
    -icu \
    -openssl-linked \
    -gstreamer 1.0 \
    -cups \
    \
    -opengl desktop \
    -qpa xcb \
    -xkbcommon \
    -feature-egl \
    -feature-system-proxies \
    -libproxy \
    -gtkstyle \
    -feature-wayland_client \
    -webengine-proprietary-codecs -webengine-ffmpeg \
    -feature-webengine-spellchecker \
       \
    -sse2 -sse3 -ssse3 \
    -avx -avx2 \
    -f16c \
    -v
    
# 请注意configure完成后的提示,使用gmake进行编译与安装,不要使用make
gmake -j$(nproc)

gmake install