<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel rdf:about="https://liar.org.cn/index.php/feed/rss/category/Framework/">
<title>阁下 - 框架</title>
<link>https://liar.org.cn/index.php/category/Framework/</link>
<description></description>
<items>
<rdf:Seq>
<rdf:li resource="https://liar.org.cn/index.php/2025/11/29/44.html"/>
</rdf:Seq>
</items>
</channel>
<item rdf:about="https://liar.org.cn/index.php/2025/11/29/44.html">
<title>源码编译安装Qt 5.15.3</title>
<link>https://liar.org.cn/index.php/2025/11/29/44.html</link>
<dc:date>2025-11-29T08:27:00+00:00</dc:date>
<description>源码下载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

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

# 切换主模块至TAG v5.15.3-lts-lgpl , 注: 不同仓库的TAG名格式不一定相同，主要关注实际仓库中的版本和LGPL协议来判断应当使用的TAG名
git submodule foreach &#039;git fetch --tags&#039;
git submodule foreach &#039;git checkout v5.15.3-lts-lgpl || echo &quot;No tag v5.15.3-lts-lgpl for $name&quot;&#039;编译构建环境编译内存问题# 创建一个足够大的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 &quot;vm.swappiness=10&quot; | sudo tee -a /etc/sysctl.conf基础构建工具sudo apt-get install -y build-essential perl python3 git ninja-build flex bison gperf pkg-configX11、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-devWebSocketsudo apt-get install -y libwebsockets-devPositioningsudo 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 &amp;&amp; make -j$(nproc) &amp;&amp; sudo make installapt安装源码编译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.gitclipperapt安装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、Mesasudo 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 &amp;&amp; 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-devOpenSSL源码编译(选)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_swICU源码编译(选)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 installlibproxy源码编译(选)libproxy可选择安装sudo apt-get install -y libproxy-de，或从源码编译cd ~/cache/qt5
git clone https://github.com/libproxy/libproxy.git
cd libproxy

mkdir build &amp;&amp; cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/qt-deps/libproxy
make -j$(nproc)
make installGStreamer 源码编译（选）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 &amp;&amp; cd buildrelease# 删除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 installdebug# 删除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</description>
</item>
</rdf:RDF>