有什么可以帮助到您的?

源码编译安装Qt 5.15.3

首先下载Qt 5.15.3 源码

请前往Qt官方下载源码包, 官方版本QWebEngine只能在20.04编译成功
若启用QWebEngine,请从KDE获取修复版本以在22、24等Ubuntu进行编译

拉取 KDE 的 Qt5 补丁源(重点)

不要用 Qt 官方 5.15.3 源码,必须换 KDE 的。

git clone https://invent.kde.org/qt/qt/qt5.git -b kde/5.15
cd qt5

# 全量
./init-repository

# 查看子模块状态,前带‘-’ 表示缺失
git submodule status

# 因为网络原因可能部分模块拉取会失败,此时反复执行
./init-repository -f
# 或
git submodule update --init --recursive

# 直至没有任何子模块前带 -

# 仅拉取可指定子模块
./init-repository --module-subset=qtwebengine

# 切换至目标版本(tag)
git tag | grep 5.15

# 切换至5.15.3
git checkout v5.15.3-lts-lgpl

# 切换子模块
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"'

编译构建环境

先完成编译、构建环境的安装,然后再进行Qt的编译。

安装基础构建工具

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 \
    libxkbcommon-dev libxkbcommon-x11-dev \
    libx11-dev \
    libxext-dev \
    libxrender-dev libxrandr-dev libxss-dev \
    libxi-dev \
    libx11-xcb-dev \
    libxext-dev libxfixes-dev libxi-dev \
    libxrender-dev libxrandr-dev libxtst-dev libxss-dev \
        libxcb-xfixes0-dev \
        libxcb-util0-dev \
        libxcb-shape0-dev \
    libxcb-shm0-dev \
        libxcb-sync-dev \
        libxcb-randr0-dev \
        libudev-dev libevdev-dev

安装图形、字体、Image格式依赖

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

蓝牙

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

串口

sudo apt-get install -y libserialport-dev

WebSockets

sudo apt-get install -y libwebsockets-dev

positioning

sudo apt-get install -y libgps-dev gpsd
sudo apt-get install -y qtbase5-private-dev
sudo apt-get install -y libqt5positioning5-dev

qtlocation依赖于clip2tri、poly2tri、clipper

  1. 在qtlocation/src/3rdparty下逐一编译源码
  2. 安装sudo add-apt-repository universe
    sudo apt update
    apt install libclipper-dev libpoly2tri-dev
  3. 若安装不了
    下载源码:
    clip2tri:从Qt源码获取(路径通常为qtlocation/src/3rdparty/clip2tri)。
    poly2tri:从GitHub克隆:
    bash
    git clone https://github.com/r3mi/poly2tri.js.git # 或查找C++版本
    clipper:从官网下载:
    bash
    wget http://sourceforge.net/projects/polyclipping/files/clipper_6.4.2.zip
    unzip clipper_6.4.2.zip
    编译与安装:
    clip2tri(以Qt源码内版本为例):
    bash
    cd qt-everywhere-src-5.15.3/qtlocation/src/3rdparty/clip2tri
    qmake && make -j$(nproc) && sudo make install
    poly2tri(C++版本):
    bash
    cd poly2tri/cpp
    mkdir build && cd build
    cmake .. && make -j$(nproc) && sudo make install
    clipper:
    bash
    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/
    验证安装:
    bash
    ls /usr/local/lib | grep -E "clipper|poly2tri"

如果修改了 poly2tri 源码,需重新编译 qtlocation 模块:

bash
cd qt-everywhere-src-5.15.3
make module-qtlocation -j$(nproc) # 仅编译qtlocation模块
或完全重新编译Qt
make -j$(nproc) && sudo make install

安装QDoc所需依赖

sudo apt-get install -y libclang-dev

# 查看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

安装OpenGL、Mesa

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

安装WebEngine(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 python3-dev 

安装其他模块用到的组件

sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
                 libqt5xmlpatterns5-dev qml-module-qt-labs-folderlistmodel

内存问题

可选择内存足够的环境进行编译,或调大swap


# 创建一个16GB的SWAP
sudo swapoff -a
sudo fallocate -l 16G /swapfile

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

# 格式化为SWAP
sudo mkswap /swapfile

# 启用
sudo swapon /swapfile

# 检查是否生效
free -h

# 若希望重启操作系统后仍然生效,则编辑/etc/fstab
sudo nano /etc/fstab

# 加上这一行
/swapfile none swap sw 0 0

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

# 永久生效
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf

编译

全量编译安装

release


mkdir build && cd build

# Linux不支持-debug-and-release,所以使用-release -force-debug-info
# 编译完relase后,再设置编译debug版本

../configure \
    -opensource -confirm-license \
    -prefix /home/lewis/opt/qt/qt/qt-5.15.3 \
    -release -force-debug-info \
    -nomake tests \
    -nomake examples \
    -skip qtandroidextras \
    -skip qtdoc \
    -skip qtwebengine \
    -qt-zlib -qt-libpng -qt-libjpeg 

#编译不过, 暂时屏蔽    
#-webengine-proprietary-codecs \
#-feature-webengine-spellchecker \

make -j$(nproc)

make install

debug


# 不能使用同一个build目录
rm -rf build
mkdir build && cd build

# Linux不支持-debug-and-release,所以debug、release分开编译
# -preifx 指定与release相同的路径

../configure \
    -opensource -confirm-license \
    -prefix /home/lewis/opt/qt/qt/qt-5.15.3 \
    -debug \
    -nomake tests \
    -nomake examples \
    -skip qtandroidextras \
    -skip qtdoc \
    -skip qtwebengine \
    -qt-zlib -qt-libpng -qt-libjpeg

make -j$(nproc)

make install
下一篇
没有了
更多文档