有什么可以帮助到您的?

源码编译安装Qt 5.15.3

源码下载

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</code></pre><blockquote>或直接使用通配符</blockquote><pre><code class="lang-shell">sudo apt-get install -y \
libxcb* \
libx11*</code></pre><h3>图形、字体格式依赖</h3><pre><code class="lang-shell">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</code></pre><h3>蓝牙</h3><pre><code class="lang-shell">sudo apt-get install -y \
libdbus-1-dev \
libbluetooth-dev</code></pre><h3>串口</h3><pre><code class="lang-shell">sudo apt-get install -y libserialport-dev</code></pre><h3>WebSocket</h3><pre><code class="lang-shell">sudo apt-get install -y libwebsockets-dev</code></pre><h3>Positioning</h3><pre><code class="lang-shell">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</code></pre><h3>安装QLocation依赖</h3><h4>clip2tri</h4><h5>使用Qt自带源码副本</h5><pre><code class="lang-shell"># 相对路径: 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</code></pre><h3>安装OpenGL、Mesa</h3><pre><code class="lang-shell">sudo apt-get install -y \
mesa-common-dev \
libglu1-mesa-dev \
libgl1-mesa-dev \
libegl1-mesa-dev</code></pre><h3>安装QWebEngine(Chromium)依赖</h3><pre><code class="lang-shell">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</code></pre><h3>安装Quick3D依赖Assimp</h3><blockquote>若环境支持安装, 则不需要从源码编译</blockquote><pre><code class="lang-shell"># 下载源码

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</code></pre><h3>OpenSSL源码编译(选)</h3><blockquote>OpenSSL可以选择安装libssl-dev或从源码编译安装</blockquote><pre><code class="lang-shell">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

啊哦,评论功能已关闭~

更多文档