<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:wfw="http://wellformedweb.org/CommentAPI/">
<channel>
<title>阁下 - 平台</title>
<link>https://liar.org.cn/index.php/category/Platform/</link>
<atom:link href="https://liar.org.cn/index.php/feed/category/Platform/" rel="self" type="application/rss+xml" />
<language>zh-CN</language>
<description></description>
<lastBuildDate>Mon, 08 Dec 2025 19:29:00 +0000</lastBuildDate>
<pubDate>Mon, 08 Dec 2025 19:29:00 +0000</pubDate>
<item>
<title>源码编译 Qt 6.5.7</title>
<link>https://liar.org.cn/index.php/2025/12/09/79.html</link>
<guid>https://liar.org.cn/index.php/2025/12/09/79.html</guid>
<pubDate>Mon, 08 Dec 2025 19:29:00 +0000</pubDate>
<dc:creator>Lewis Ho</dc:creator>
<category><![CDATA[Linux]]></category>
<category><![CDATA[Qt]]></category>
<description><![CDATA[构建环境环境要求用于进行Qt 6.5.7源码编译的机器环境需满足以下要求：可用于编译的物理内存 + SWAP交换区 空间 &gt; 40GB；同等条件下，物理内存越大，编译速度越快可用于编译的磁...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h1>构建环境</h1><h2>环境要求</h2><p>用于进行Qt 6.5.7源码编译的机器环境需满足以下要求：</p><ul><li>可用于编译的物理内存 + SWAP交换区 空间 &gt; 40GB；同等条件下，物理内存越大，编译速度越快</li><li>可用于编译的磁盘空间 &gt; 160GB</li><li>建议用于编译的CPU核心数 ≥ 16</li></ul><h3>规避内存不足问题</h3><pre><code class="lang-shell"># 当物理内存无法满足编译条件时，可提供足够大的SWAP

# 取消当前所有SWAP文件
sudo swapoff -a

# 取消指定SWAP文件则指定具体的SWAP文件名, 如:
# sudo swap off /swapfile

# 创建一个40GB的SWAP文件/swapfile
# 若已存在SWAP文件, 重新分配大小则先取消该文件的挂载, 然后重新分配该文件的大小
sudo fallocate -l 40G /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</code></pre><h2>构建依赖</h2><ul><li>下述构建过程将启用Qt 6.5.7在Linux环境下的所有组件功能。</li><li><p>凡Qt自带副本的依赖项，均使用Qt自带副本进行编译而不使用系统环境所提供版本：</p><ul><li>zlib</li><li>libpng</li><li>freetype</li><li>harfbuzz</li><li>pcre2</li><li>libjpeg</li><li>sqlite</li><li>webengine-*</li><li>double-conversion</li></ul></li></ul><blockquote><strong>请注意部分软件包，在不同版本的操作系统之上包名不同，若出现部分包不存在的情况，请搜索在该系统上相应包，获取到实际的包名进行安装。若受限于系统版本而无法直接安装时请选择从源码编译安装。</strong></blockquote><h3>更新缓存</h3><pre><code class="lang-shell">sudo apt-get update -y
sudo apt-get install -y software-properties-common

sudo add-apt-repository universe
sudo apt-get update -y </code></pre><h3>编译工具</h3><pre><code class="lang-shell">sudo apt-get install -y \
    build-essential \
    perl \
    git \
    ninja-build \
    pkg-config \
    gcc \
    g++ \
    cmake \
    gdb \
    wget \
    curl \
    ccache

#clang和llvm装12-15版本
sudo apt-get install -y \
    clang-14 \
    libclang-14-dev \
    llvm-14 \
    llvm-14-dev \
    npm
    </code></pre><h3>升级pthread、ldd</h3><pre><code class="lang-shell">sudo apt-get install -y \
    libpthread* \
    ldd</code></pre><h3>基础依赖</h3><pre><code class="lang-shell">sudo apt-get install -y \
    libdbus-1-dev \
    libinput-dev \
    libmtdev-dev \
    libevdev-dev</code></pre><blockquote>非开发环境(运行时库)</blockquote><pre><code class="lang-shell"># libudev-dev的运行时库
 sudo apt-get install -y \
    libudev1</code></pre><h3>XCB&X11全家桶</h3><h4>必须依赖项</h4><pre><code class="lang-shell"># xcb-proto提供协议定义文件，用于生成XCB的各种扩展库（如XRandR、Xinerama、XInput等；编译依赖X11或Qt/XCB后端的程序时，需要它生成头文件和接口
# X11 协议头文件和开发包
sudo apt-get install -y \
    xcb-proto \
    libxproto-dev

sudo apt-get install -y \
    libx11-dev \
    libx11-xcb-dev \
    libxext-dev \
    libxfixes-dev \
    libxi-dev \
    libxrender-dev \
    libxrandr-dev \
    libxkbcommon-dev libxkbcommon-x11-dev \
    libxinerama-dev \
    libxss-dev \
    libxtst-dev \
    libxcursor-dev \
    libxdamage-dev \
    libxcomposite-dev \
    libxshmfence-dev \
    libxkbfile-dev</code></pre><pre><code class="lang-shell"># XCB
# libxcb-xv-dev在不同版本Ubuntu上包名不同, 根据实际搜索结果调整包名
sudo apt-get install -y \
    libxcb1-dev \
    libxcb-keysyms1-dev \
    libxcb-render0-dev \
    libxcb-shape0-dev \
    libxcb-shm0-dev \
    libxcb-xfixes0-dev \
    libxcb-icccm4-dev \
    libxcb-image0-dev \
    libxcb-util-dev \
    libxcb-xinerama0-dev \
    libxcb-randr0-dev \
    libxcb-sync-dev \
    libxcb-xkb-dev \
    libxcb-cursor-dev \
    libxcb-render-util0-dev \
    libxcb-ewmh-dev \
    libxcb-util0-dev \
    libsm-dev \
    libxcb-xinput-dev \
    libxcb-xv-dev \
    libxcb-xv0-dev \
    libxcb-xvmc0-dev \
    libxcb-glx0-dev</code></pre><p><strong>运行时库(非开发环境)</strong></p><pre><code class="lang-shell"># 核心 XCB 运行时库，提供基本的 X11 客户端接口
# XCB 的工具库，提供常用函数、辅助数据结构和便利 API
# 支持键盘按键映射（KeySym）解析，用于处理键盘输入
# 图像处理扩展库，允许 X11 图像操作（像素数据读取/写入）
# ICCCM（Inter-Client Communication Conventions Manual）支持库，用于客户端间通信和窗口管理约定
# X Render 扩展工具库，提供渲染相关的辅助函数（抗锯齿、Alpha 混合等）
# Xinerama 扩展支持库，用于多显示器管理
# X11 光标管理扩展库，允许程序操作鼠标光标
# X Keyboard 扩展库，提供键盘布局、按键状态和事件管理
# EWMH（Extended Window Manager Hints）扩展，窗口管理器交互
sudo apt-get install -y \
    libxcb1 \
    libxcb-util1 \
    libxcb-keysyms1 \
    libxcb-image0 \
    libxcb-icccm4 \
    libxcb-render-util0 \    
    libxcb-xinerama0 \
    libxcb-cursor0 \
    libxcb-xkb1 \
    libxcb-ewmh2</code></pre><h4>附加项</h4><pre><code class="lang-shell"># XCB
# XCB 国际化（Input Method）扩展。
# X Composite 扩展，用于透明窗口、合成效果。
# Damage 扩展，用于检测屏幕更新区域，常用于远程桌面和 compositor
# DPMS 扩展，用于显示器电源管理
# DRI2/DRI3（Direct Rendering Infrastructure）开发包，用于 GPU 加速渲染
# GLX 扩展开发包，OpenGL 与 X11 窗口交互
# Present 扩展开发包，用于同步显示更新，减少撕裂
# Record 扩展，用于记录或截取 X11 事件
# RES 扩展开发包，用于屏幕分辨率管理
# Screensaver 扩展，用于防屏保管理
# XFree86 DRI 扩展，用于 GPU 访问
# X资源管理（X Resource Manager）扩展，用于应用配置
# XTest 扩展，用于模拟输入事件（键盘/鼠标）
# X Video 扩展开发包，用于视频渲染
# X Video Motion Compensation 扩展开发包，用于硬件视频解码加速
# XFree86 VidMode 扩展开发包，用于屏幕模式切换和显存管理
# 数据压缩库和命令行工具，某些 X11 扩展或缓存会用到压缩
# tslib 的开发包，用于旧式触摸屏输入事件处理（多用于嵌入式设备）
# XSLT 样式表处理库开发包，用于 XML 转换和解析，很多桌面程序或构建工具可能依赖它
# XSLT 样式表处理库开发包，用于 XML 转换和解析，很多桌面程序或构建工具可能依赖它
sudo apt-get install -y \
    \
    libxcb-imdkit-dev \
    libxcb-composite0-dev \
    libxcb-damage0-dev \
    libxcb-dpms0-dev \
    libxcb-dri2-0-dev \
    libxcb-present-dev \
    libxcb-record0-dev \
    libxcb-res0-dev \
    libxcb-screensaver0-dev \
    libxcb-xf86dri0-dev \
    libxcb-xrm-dev \
    libxcb-xtest0-dev \
    \
    libxxf86vm-dev \
    libzstd-dev \
    libts-dev \
    libxslt-dev \
    libxslt1-dev</code></pre><p><strong>运行时库(非开发环境)</strong></p><pre><code class="lang-shell"># XCB 国际化（Input Method）扩展。 
# Damage 扩展，用于检测屏幕更新区域，常用于远程桌面和 compositor
# DPMS 扩展，用于显示器电源管理
# DRI2/DRI3（Direct Rendering Infrastructure）开发包，用于 GPU 加速渲染
# Record 扩展，用于记录或截取 X11 事件
# Screensaver 扩展，用于防屏保管理
# XFree86 DRI 扩展，用于 GPU 访问    
# X资源管理（X Resource Manager）扩展，用于应用配置
# XTest 扩展，用于模拟输入事件（键盘/鼠标）
#X Video Motion Compensation 扩展开发包，用于硬件视频解码加速
# XCB 文档，包含接口说明和协议文档
sudo apt-get install -y \
    libxcb-imdkit0 \
    libxcb-damage0 \
    libxcb-dpms0 \
    libxcb-dri3-dev \
    libxcb-record0 \
    libxcb-screensaver0 \
    libxcb-xf86dri0 \
    libxcb-xrm0 \
    libxcb-xtest0 \
    libxcb-xvmc0 \
    libxcb-doc</code></pre><pre><code class="lang-shell"># X11
# Damage 扩展运行时库，检测屏幕区域更新 
# XKB common 文档和工具，用于键盘布局管理   
# XKB common 文档和工具，用于键盘布局管理
# 用于 GPU/CPU 之间的同步 fence，配合 OpenGL/DRI 渲染    
# X11 核心库文档  
# X11 的 Perl 模块，主要用于测试、自动化、窗口管理或 X11 接口交互 
# X11 的 Perl 模块，主要用于测试、自动化、窗口管理或 X11 接口交互   
# X11 的 Perl 模块，主要用于测试、自动化、窗口管理或 X11 接口交互    
# X11 的 Perl 模块，主要用于测试、自动化、窗口管理或 X11 接口交互    
# X11 的 Perl 模块，主要用于测试、自动化、窗口管理或 X11 接口交互    
# X11 的 Perl 模块，主要用于测试、自动化、窗口管理或 X11 接口交互    
# xine 多媒体框架的二进制和开发包，支持音视频播放和各种解码器插件
# xine 多媒体框架的二进制和开发包，支持音视频播放和各种解码器插件
# xine 多媒体框架的二进制和开发包，支持音视频播放和各种解码器插件    
# xine 多媒体框架的二进制和开发包，支持音视频播放和各种解码器插件
# 数据压缩库和命令行工具，某些 X11 扩展或缓存会用到压缩
sudo apt-get install -y \
    libxdamage1 \
    libxkbcommon-doc \
    libxkbcommon-tools \
    libxshmfence1 \
    libx11-doc \
    libx11-freedesktop-desktopentry-perl \
    libx11-guitest-perl \
    libx11-keyboard-perl \
    libx11-protocol-other-perl \
    libx11-windowhierarchy-perl \
    libx11-xcb-perl \
    libxine2-bin \
    libxine2-dev \
    libxine2-misc-plugins \
    libxine2-plugins \
    \
    zstd</code></pre><h3>OpenGL</h3><pre><code class="lang-shell"># OpenGL 开发包，提供核心 OpenGL API 头文件和库
# EGL 开发包，用于 OpenGL/ES 与窗口系统（X11/Wayland）交互
# OpenGL ES 2.x 开发包，适合嵌入式或移动平台
# GLU（OpenGL Utility Library）开发包，提供矩阵、曲面和辅助函数
# GLib 2 开发包，提供数据结构、事件循环、线程、字符串处理等通用基础功能
# Mesa 图形库通用开发文件，OpenGL/OpenGL ES 的基础依赖
# 一般用于提供标准 OpenGL 链接接口（大部分发行版通过 Mesa 提供实现）
# GLFW 库开发包，用于创建窗口、OpenGL 上下文和处理输入事件
# SDL 1.2 开发包，提供跨平台窗口、渲染、输入和音频管理接口
sudo apt-get install -y \
    libgl1-mesa-dev \
    libegl1-mesa-dev \
    libgles2-mesa-dev \
    libglu1-mesa-dev \
    libglib2.0-dev \
    mesa-common-dev \
    libopengl-dev \
    libglfw3-dev \
    libsdl1.2-dev</code></pre><p><strong>运行时</strong></p><pre><code class="lang-shell"># GLib 2 的运行时库
# EGL 的运行时库，用于程序实际渲染
sudo apt-get install -y \
    libglib2.0-0 \
    libegl1-mesa</code></pre><h3>OpenSSL</h3><pre><code class="lang-shell">sudo apt-get install -y \
    libssl-dev</code></pre><h3>图形、字体</h3><pre><code class="lang-shell">sudo apt-get install -y  \
    libfontconfig1-dev \
    libvulkan-dev \
    libvulkan1 \
    mesa-common-dev \
    libglu1-mesa-dev \
    freeglut3-dev \
    libgtk-3-dev \
    libgtk2.0-dev \
    libjpeg-dev \
    libfreetype6-dev
    </code></pre><h3>蓝牙</h3><pre><code class="lang-shell">sudo apt-get install -y \
    libbluetooth-dev \
    bluez </code></pre><h3>串口</h3><pre><code class="lang-shell">sudo apt-get install -y \
    libudev-dev \
    libserialport-dev</code></pre><h3>多媒体</h3><pre><code class="lang-shell">sudo apt-get install -y \
    libasound2-dev \
    libpipewire-0.3-dev \
    libpulse-dev</code></pre><pre><code class="lang-shell"># GStreamer
sudo apt-get install -y \
    libgstreamer1.0-dev \
    libgstreamer-plugins-base1.0-dev \
    gstreamer1.0-plugins-base \
    gstreamer1.0-plugins-good \
    gstreamer1.0-plugins-bad \
    gstreamer1.0-plugins-ugly \
    gstreamer1.0-libav \
    gstreamer1.0-tools
</code></pre><h3>QtWayland依赖</h3><pre><code class="lang-shell"># Wayland EGL 后端开发包，主要用于在 Wayland 显示服务器上进行 OpenGL / EGL 渲染 的开发
sudo apt-get install -y \
    wayland-protocols \
    libwayland-dev \
    libwayland-egl-backend-dev</code></pre><h3>atspi——X11 Accessibility Bridge</h3><pre><code class="lang-shell">sudo apt-get install -y \
    libatspi2.0-dev</code></pre><h3>libproxy——Qt 网络代理支持</h3><pre><code class="lang-shell">sudo apt-get install -y \
    libproxy-dev</code></pre><h3>SCTP——SCTP 协议支持</h3><pre><code class="lang-shell">sudo apt-get install -y \
    libsctp-dev</code></pre><h3>SRTP</h3><pre><code class="lang-shell">sudo apt-get install -y \
    libsrtp2-dev</code></pre><h3>PCI——PCI检测</h3><pre><code class="lang-shell">sudo apt-get install -y \
    libpci-dev</code></pre><h3>LTTng——性能跟踪工具</h3><pre><code class="lang-shell">sudo apt-get install -y \
    lttng-modules-dkms \
    liblttng-ust-dev \
    lttng-tools</code></pre><h3>directfb——嵌入式平台 GUI，桌面一般不启用</h3><blockquote><p>适用于嵌入式。</p><p>使用Qt自带副本时，请勿安装。</p></blockquote><pre><code class="lang-shell">sudo apt-get install -y \
    libfusion-dev \
    libdirect-dev \
    libdirectfb-dev</code></pre><h3>GSSAPI——Kerberos / SASL 支持</h3><pre><code class="lang-shell"># Kerberos 核心开发包，提供头文件和库，用于编译依赖 Kerberos 的程序
# GSSAPI Kerberos 的开发包，提供头文件和静态/动态库，用于编译使用 GSSAPI 的程序  
# 提供 Kerberos 配置工具和路径信息，用于编译和链接依赖 Kerberos 的程序
sudo apt-get install -y \
    libkrb5-dev \
    krb5-config
    
# Ubuntu 22.05 不存在此包: libgssapi-krb5-dev</code></pre><p><strong>运行时</strong></p><pre><code class="lang-shell"># 运行时库，提供 GSSAPI（Generic Security Services API）接口的 Kerberos 实现，用于程序在运行时进行身份验证 
# Kerberos 用户工具包，提供命令行工具如 kinit、klist 等，用于获取和管理 Kerberos 票据（tickets）
sudo apt-get install -y \
    libgssapi-krb5-2 \
    krb5-user</code></pre><h3>打印机</h3><pre><code class="lang-shell">sudo apt-get install -y \
    libcups2-dev \
    cups</code></pre><h3>hunspell——Qt Virutal Keyboard拼写检查</h3><pre><code class="lang-shell">sudo apt-get install -y \
    hunspell \
    libhunspell-dev</code></pre><h3>SensorFW支持</h3><pre><code class="lang-shell">sudo apt-get install -y \
    libsensors4-dev \
    libsensors-config</code></pre><h3>HiRes Wheel</h3><pre><code class="lang-shell">sudo apt-get install -y \
    libinput10 \
    libhidapi-dev</code></pre><h3>assimp——Quick3D</h3><blockquote>使用Qt自带副本时，请勿安装。</blockquote><pre><code class="lang-shell">sudo apt-get install -y libjasper
sudo apt-get install -y \
    libassimp-dev depend on jasper</code></pre><h3>FFMPEG——Qt Multimedia / WebEngine / Video</h3><blockquote><ol><li>Qt6.5.7中多媒体组件必须使用系统提供的版本，并且版本需要在4.x以上；仅QWebEngine可以选择使用自带副本或系统版本。不支持直接安装4.x以上版本时，请从源码编译安装FFMPEG。</li><li>libavresample在Ubuntu 22.04之后已经被移除了，FFMPEG 从4.x开始直接使用libswresample代替libavresample。</li></ol></blockquote><pre><code class="lang-shell">sudo apt-get install -y \
    ffmpeg \
    libavcodec-dev \
    libavformat-dev \
    libavutil-dev \
    libswscale-dev \
    libswresample-dev</code></pre><p>从源码编译安装:</p><pre><code class="lang-shell"># 安装FFMPEG编译依赖
sudo apt-get install -y \
    nasm \
    libass-dev \
    libfdk-aac-dev \
    libvorbis-dev \
    libx264-dev \
    libx265-dev

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
# 推荐6.x
git checkout n6.1.3

mkdir build &amp;&amp; cd build

../configure \
  --prefix=/usr/local/ffmpeg6.1.3 \
  --pkg-config-flags=&quot;--static&quot; \
  --extra-cflags=&quot;-I/usr/local/ffmpeg6.1.3/include&quot; \
  --extra-ldflags=&quot;-L/usr/local/ffmpeg6.1.3/lib&quot; \
  --extra-libs=&quot;-lpthread -lm&quot; \
  --bindir=/usr/local/bin \
  --enable-gpl \
  --enable-nonfree \
  --enable-shared \
  --disable-static \
  --disable-debug \
  --disable-doc \
  --enable-swresample \
  --enable-libx264 \
  --enable-libvpx \
  --enable-libfdk-aac \
  --enable-libopus \
  --enable-libass \
  --enable-libfreetype \
  --enable-libvorbis
  
  make -j$(nproc)
  sudo make install
  
# 配置Qt编译时，显示地指定FFMPEG的路径
# export PKG_CONFIG_PATH=/usr/local/ffmpeg6.1.3/lib/pkgconfig:$PKG_CONFIG_PATH
# export LD_LIBRARY_PATH=/usr/local/ffmpeg6.1.3/lib:$LD_LIBRARY_PATH</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 \
    geoip-bin \
    geoip-database \
    geoclue-2.0 \
    libgeoclue-2-dev
    
# Ubuntu 22.04 不存在此包: geoip-database-contrib</code></pre><h3>gRPC</h3><p><strong>Qt 6.5.7需要1.50.x\~1.56.x的gRPC。若系统版本可提供满足的版本则直接安装即可。</strong></p><pre><code class="lang-shell">sudo apt-get install -y \
    libgrpc-dev \
    libgrpc++-dev</code></pre><p><strong>否则，从源码编译满足需求的protobuf与gRPC。</strong></p><pre><code class="lang-shell">cd ~/cache
git clone https://github.com/grpc/grpc.git
cd grpc
git checkout v1.54.3
git submodule update --init --recursive

mkdir build &amp;&amp; cd build

# 使用自带的PROTOBUF副本
# 使用系统安装的OpenSSL 3.x，编码Qt用3.x而gRPC使用自带的1.x；导致符号不一致
# 生成动态库，避免Qt链接了OpenSSL而gRPC也链接了OpenSSL导致的重复定义
cmake .. \
  -DCMAKE_INSTALL_PREFIX=/opt/qt-deps/grpc-1.54 \
  -DgRPC_INSTALL=ON \
  -DgRPC_BUILD_TESTS=OFF \
  -DgRPC_BUILD_CSHARP_EXT=OFF \
  -DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF \
  -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF \
  -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF \
  -DgRPC_PROTOBUF_PROVIDER=module \
  -DgRPC_SSL_PROVIDER=package \
  -DBUILD_SHARED_LIBS=ON

cmake --build . --parallel
sudo cmake --install .
</code></pre><h3>QtTextToSpeech 依赖</h3><pre><code class="lang-shel">sudo apt-get install -y \
  libspeechd-dev \
  speech-dispatcher \
  espeak-ng \
  espeak-ng-data</code></pre><h3>QWebEngine</h3><h4>Python3</h4><pre><code class="lang-shell">sudo apt-get install -y \
    python3 \
    python3-dev \
    python3-setuptools \
    python-is-python3 \
    python3-pip \
    python3-pexpect</code></pre><h4>HTML5</h4><pre><code class="lang-shell">sudo apt install -y \
  python3-html5lib \
  python3-lxml \
  python3-openssl \
  python3-bs4</code></pre><h4>NodeJS</h4><blockquote>若需更新版本可通过打开链接获取最新的指令：<a href="https://deb.nodesource.com/">https://deb.nodesource.com/</a></blockquote><pre><code class="lang-shell">curl -fsSL https://deb.nodesource.com/setup_18.x | sudo bash -
sudo apt-get install -y nodejs

# 或
cd /opt
sudo wget https://nodejs.org/dist/v18.20.1/node-v18.20.1-linux-x64.tar.xz
sudo tar -xJf node-v18.20.1-linux-x64.tar.xz
sudo mv node-v18.20.1-linux-x64 node18
sudo ln -sf /opt/node18/bin/node /usr/bin/node
sudo ln -sf /opt/node18/bin/npm /usr/bin/npm
node -v  # 应该显示 v18.x</code></pre><h4>brotli</h4><blockquote>使用Qt自带副本时，请勿安装。</blockquote><pre><code class="lang-shell">sudo apt-get install -y \
    brotli \
    libbrotli-dev</code></pre><h4>QWebEngine</h4><pre><code class="lang-shell"># 构建工具和解析器
# 词法分析器生成器
# 语法解析器生成器
# 完美哈希函数生成工具
# Google 的构建配置工具（类似 CMake）
sudo apt-get install -y \
    flex \
    bison \
    gperf \
    gyp</code></pre><pre><code class="lang-shell"># 安全与系统接口
# NSS (Network Security Services) 开发包，用于加密、证书和 TLS/SSL 支持
# Direct Rendering Manager 开发包，GPU 低级访问
# Generic Buffer Management 开发包，用于 GPU 内存缓冲管理
sudo apt-get install -y \
    libnss3-dev \
    libdrm-dev \
    libgbm-dev</code></pre><pre><code class="lang-shell"># 图像与 GUI
# WebP 图片编解码库
# ATK 无障碍工具包开发库，支持辅助功能
# JSON 解析和操作库 
sudo apt-get install -y \
    libwebp-dev\
    libatk-bridge2.0-dev \
    libjsoncpp-dev</code></pre><pre><code class="lang-shell"># 音视频处理
# Opus 音频编解码库
# zip 压缩/解压处理
# VP8/VP9 视频编解码
# 异步事件处理库，常用于网络和多媒体应用
sudo apt-get install -y \
    libopus-dev \
    libminizip-dev \
    libvpx-dev \
    libevent-dev</code></pre><pre><code class="lang-shell"># 压缩与搜索
# Snappy 压缩库
# RE2 正则表达式库
sudo apt-get install -y \
    libsnappy-dev \
    libre2-dev</code></pre><pre><code class="lang-shell">sudo apt-get install -y \
    libprotobuf-dev \
    protobuf-compiler</code></pre><p><strong>运行时</strong></p><pre><code class="lang-shell"># WebP 图片编解码库
# ATK 无障碍工具包开发库，支持辅助功能
sudo apt-get install -y \
    libnss3 \
    libwebp \
    libatk1.0-dev</code></pre><h3>其他组件</h3><pre><code class="lang-shell">
# X11 会话管理和客户端通信
sudo apt-get install -y \
    libsm6 \
    libice6 \
    libice-dev</code></pre><pre><code class="lang-shell"># 系统服务与权限
# D-Bus 消息总线开发和测试
sudo apt-get install -y \
    dbus \
    dbus-tests \
    libdbus-glib-1-dev</code></pre><pre><code class="lang-shell"># 控制 Linux 进程能力的开发包
# 与 systemd 服务交互的开发包
# 色彩与图像
# 色彩管理库开发包（ICC 配置文件支持）
# MNG 图片格式支持
# TIFF 图像格式支持
# 开发与构建辅助工具
# 文本处理工具
# 补丁文件分析工具
# 文档生成工具
# ELF 文件 RPATH 修改工具
# 网络调试和转发工具
# 文件类型识别
# 系统本地化支持
# 系统工具包
# 压缩
# XZ、CPIO、LZ4 压缩/解压工具
# bzip2 和 B2 压缩库
# ATK 无障碍库的 C++ 接口
# 数据库
# PostgreSQL 客户端开发库
# Markdown 4 C 库的开发包
# 系统构建和文件归档工具
sudo apt-get install -y \
    libcap-dev \
    libsystemd-dev \
    \
    liblcms2-dev \
    libmng-dev \
    libmng2 \
    libtiff-dev \
    \
    gawk \
    diffstat \
    texinfo \
    chrpath \
    socat \
    file \
    locales \
    debianutils \
    iputils-ping \
    \
    libbz2-dev \
    libb2-dev \
    xz-utils \
    liblz4-tool \
    \
    libatkmm-1.6-dev \
    \
    libpq-dev \
    cpio</code></pre><h2>编译安装</h2><h3>cmake 编译主体</h3><pre><code class="lang-shell"># 设置 QT 插件调试，以便配置、编译过程输出详细错误信息
export QT_DEBUG_PLUGINS=1
export CC=/usr/bin/gcc
export CXX=/usr/bin/g++
export PKG_CONFIG_PATH=/usr/local/ffmpeg6.1.3/lib/pkgconfig:/opt/qt-deps/grpc-1.54/lib/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=/usr/local/ffmpeg6.1.3/lib:/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

# Release, RelWithDebInfo, Debug
# Qt 6.5.7的组件启用可以进行一次最小配置，然后用“grep -i FEATURE_ CMakeCache.txt”从CMakeCache.txt获取所有组件正确的启用选项名称
# 带有FEATURE_system的部分即可以选择使用系统版本或Qt自带版本的依赖项或组件

cmake .. -G Ninja \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=~/opt/qt/6.5.7 \
    -DCMAKE_PREFIX_PATH=&quot;/opt/qt-deps/grpc-1.54&quot; \
    -DgRPC_DIR=/opt/qt-deps/grpc-1.54/lib/cmake/grpc \
    -DCMAKE_C_COMPILER_LAUNCHER=ccache \
    -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
    -DCMAKE_C_STANDARD=11 \
    -DCMAKE_C_STANDARD_REQUIRED=ON \
    -DCMAKE_CXX_STANDARD=17 \
    -DCMAKE_CXX_STANDARD_REQUIRED=ON \
    -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF \
    -DQT_FEATURE_ccache=ON \
    -DQT_UNITY_BUILD=OFF \
    \
    -DQT_FEATURE_ffmpeg=ON \
    -DQT_FEATURE_fontconfig=ON \
    -DQT_FEATURE_grpc=ON \
    -DQT_FEATURE_libproxy=ON \
    -DQT_FEATURE_openssl=ON \
    -DQT_FEATURE_openssl_linked=OFF \
    -DQT_FEATURE_sctp=ON \
    -DQT_FEATURE_xcb_glx=ON \
    -DQT_FEATURE_pdf=ON \
    -DQT_FEATURE_system_assimp=OFF \
    -DQT_FEATURE_system_doubleconversion=OFF \
    -DQT_FEATURE_system_freetype=OFF \
    -DQT_FEATURE_system_harfbuzz=OFF \
    -DQT_FEATURE_system_jpeg=ON \
    -DQT_FEATURE_system_libb2=OFF\
    -DQT_FEATURE_system_pcre2=OFF \
    -DQT_FEATURE_system_png=OFF \
    -DQT_FEATURE_system_sqlite=OFF \
    -DQT_FEATURE_system_textmarkdownreader=OFF \
    -DQT_FEATURE_system_tiff=OFF \
    -DQT_FEATURE_system_webp=OFF \
    -DQT_FEATURE_system_xcb_xinput=OFF \
    -DQT_FEATURE_system_zlib=OFF \
    \
    -DQT_FEATURE_webengine_build_ninja=ON \
    -DQT_FEATURE_webengine_printing_and_pdf=ON \
    -DQT_FEATURE_webengine_system_ffmpeg=OFF \
    -DQT_FEATURE_webengine_system_freetype=OFF \
    -DQT_FEATURE_webengine_system_harfbuzz=OFF \
    -DQT_FEATURE_webengine_system_icu=OFF \
    -DQT_FEATURE_webengine_system_libjpeg=ON \
    -DQT_FEATURE_webengine_system_libpng=OFF \
    -DQT_FEATURE_webengine_system_libwebp=OFF \
    -DQT_FEATURE_webengine_system_libxml=OFF \
    -DQT_FEATURE_webengine_system_libopenjpeg2=OFF \
    -DQT_FEATURE_webengine_system_libpci=OFF \
    -DQT_FEATURE_webengine_system_libtiff=OFF \
    -DQT_FEATURE_webengine_system_libvpx=OFF \
    -DQT_FEATURE_webengine_system_minizip=OFF \
    -DQT_FEATURE_webengine_system_opus=OFF \
    -DQT_FEATURE_webengine_system_poppler=OFF \
    -DQT_FEATURE_webengine_system_pulseaudio=OFF \
    -DQT_FEATURE_webengine_system_re2=OFF \
    -DQT_FEATURE_webengine_system_snappy=OFF \
    -DQT_FEATURE_webengine_system_zlib=OFF \
    -DQT_FEATURE_webengine_qt_freetype=ON \
    -DQT_FEATURE_webengine_qt_harfbuzz=ON \
    -DQT_FEATURE_webengine_qt_libjpeg=OFF \
    -DQT_FEATURE_webengine_qt_libpng=ON \
    -DQT_FEATURE_webengine_qt_zlib=ON \
    -DQT_FEATURE_webengine_developer_build=ON \
    -DQT_FEATURE_webengine_proprietary_codecs=ON \
    \
    -DQT_BUILD_EXAMPLES=OFF \
    -DBUILD_TESTING=OFF \
    \
    -Wno-dev

cmake --build . --parallel $(nproc)
cmake --install .</code></pre><h3>编译帮助文档</h3><pre><code class="lang-shell"># 仅编译 docs
ninja docs
# 编译完成后安装 docs
ninja install_docs</code></pre>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://liar.org.cn/index.php/2025/12/09/79.html#comments</comments>
<wfw:commentRss>https://liar.org.cn/index.php/feed/category/Platform/2025/12/09/79.html</wfw:commentRss>
</item>
<item>
<title>Ubuntu 安装部署基本内容</title>
<link>https://liar.org.cn/index.php/2025/12/06/77.html</link>
<guid>https://liar.org.cn/index.php/2025/12/06/77.html</guid>
<pubDate>Sat, 06 Dec 2025 13:24:00 +0000</pubDate>
<dc:creator>Lewis Ho</dc:creator>
<category><![CDATA[Linux]]></category>
<category><![CDATA[应用]]></category>
<description><![CDATA[基础软件sudo apt-get update -ysudo apt-get install -y \    vim \    net-tools \    open-vm-tool* \   ...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h3>基础软件</h3><pre><code class="lang-shell">sudo apt-get update -y

sudo apt-get install -y \
    vim \
    net-tools \
    open-vm-tool* \
    openssh-server \
    gcc \
    g++ \
    cmake \
    git \
    gnome-tweaks \
    bleachbit \
    gnome-shell-extensions

# open-vm开机挂载共享目录
vim /etc/rc.local

# /etc/rc.local键入以下内容
#!/bin/sh -e
sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other

# 赋予/etc/rc.local执行权限
chmod +x /etc/rc.local

# 插件下载
# https://extensions.gnome.org
# 主题、icon等下载
# https://gnome-look.org

</code></pre>
]]></content:encoded>
<slash:comments>2</slash:comments>
<comments>https://liar.org.cn/index.php/2025/12/06/77.html#comments</comments>
<wfw:commentRss>https://liar.org.cn/index.php/feed/category/Platform/2025/12/06/77.html</wfw:commentRss>
</item>
<item>
<title>源码编译安装Qt 5.15.3</title>
<link>https://liar.org.cn/index.php/2025/11/29/44.html</link>
<guid>https://liar.org.cn/index.php/2025/11/29/44.html</guid>
<pubDate>Sat, 29 Nov 2025 08:27:00 +0000</pubDate>
<dc:creator>Lewis Ho</dc:creator>
<category><![CDATA[Linux]]></category>
<category><![CDATA[框架]]></category>
<category><![CDATA[Qt]]></category>
<description><![CDATA[源码下载Qt 官方源码下载（原生BUG）KDE源码下载（维护改进）由于Qt 5.15.3 LTS Qt官方已不再维护，且其源码存在BUG、依赖的部分第三方不再维护甚至撤销，如定位。KDE仓库中对...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h2>源码下载</h2><h3>Qt 官方源码下载（原生BUG）</h3><h3>KDE源码下载（维护改进）</h3><blockquote>由于Qt 5.15.3 LTS Qt官方已不再维护，且其源码存在BUG、依赖的部分第三方不再维护甚至撤销，如定位。KDE仓库中对该版本存在的问题进行了修复。因此建议使用KDE维护的Qt 5.15.3版本源码</blockquote><pre><code class="lang-shell"># 克隆
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;</code></pre><h2>编译构建环境</h2><h3>编译内存问题</h3><pre><code class="lang-shell"># 创建一个足够大的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</code></pre><h3>基础构建工具</h3><pre><code class="lang-shell">sudo apt-get install -y build-essential perl python3 git ninja-build flex bison gperf pkg-config</code></pre><h3>X11、XCB全家桶</h3><pre><code class="lang-shell">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 &amp;&amp; make -j$(nproc) &amp;&amp; sudo make install</code></pre><h5>apt安装</h5><h5>源码编译</h5><h4>poly2tri</h4><h5>使用Qt自带源码副本</h5><h4>apt安装</h4><pre><code class="lang-shell">sudo add-apt-repository universe
sudo apt-get update -y
sudo apt-get install -y libpoly2tri-dev</code></pre><h5>源码编译</h5><pre><code class="lang-shell">git clone https://github.com/r3mi/poly2tri.js.git</code></pre><h4>clipper</h4><h5>apt安装</h5><pre><code class="lang-shell">sudo add-apt-repository universe
sudo apt-get update -y
sudo apt-get install -y libclipper-dev</code></pre><h5>源码编译</h5><pre><code class="lang-shell">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/</code></pre><h3>安装QDoc依赖</h3><pre><code class="lang-shell">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</code></pre><h3>安装QWebEngine、QPdf、QDoc 依赖Python2</h3><blockquote>若环境支持Python2安装，则无需下载源码进行编译安装。</blockquote><pre><code class="lang-shell"># 找个目录下载 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</code></pre><h3>安装QPdf依赖</h3><pre><code class="lang-shell">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 &amp;&amp; cd build

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

sudo make install</code></pre><h3>安装其他组件</h3><pre><code class="lang-shell">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</code></pre><h3>ICU源码编译(选)</h3><blockquote>ICU可选择安装libicu-dev或从源码编译</blockquote><pre><code class="lang-shell">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</code></pre><h3>libproxy源码编译(选)</h3><blockquote>libproxy可选择安装sudo apt-get install -y libproxy-de，或从源码编译</blockquote><pre><code class="lang-shell">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 install</code></pre><h3>GStreamer 源码编译（选）</h3><blockquote>GStreamer可选择安装或从源码编译</blockquote><pre><code class="lang-shell">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</code></pre><h2>编译安装</h2><blockquote>当前版本支持指定debug-and-release，故分次进行release与debug版本的编译，两次编译指定相同的安装路径，则debug和relase共存为一份。</blockquote><pre><code class="lang-shell">mkdir build &amp;&amp; cd build</code></pre><h3>release</h3><pre><code class="lang-shell"># 删除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</code></pre><h3>debug</h3><pre><code class="lang-shell"># 删除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</code></pre>
]]></content:encoded>
<slash:comments>4</slash:comments>
<comments>https://liar.org.cn/index.php/2025/11/29/44.html#comments</comments>
<wfw:commentRss>https://liar.org.cn/index.php/feed/category/Platform/2025/11/29/44.html</wfw:commentRss>
</item>
<item>
<title>源码编译安装GCC</title>
<link>https://liar.org.cn/index.php/2025/08/20/27.html</link>
<guid>https://liar.org.cn/index.php/2025/08/20/27.html</guid>
<pubDate>Wed, 20 Aug 2025 02:40:00 +0000</pubDate>
<dc:creator>Lewis Ho</dc:creator>
<category><![CDATA[C++]]></category>
<category><![CDATA[Linux]]></category>
<category><![CDATA[组件]]></category>
<description><![CDATA[安装依赖环境sudo dnf groupinstall &quot;Development Tools&quot; -ysudo dnf install gmp gmp-devel mpfr m...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h1>安装依赖环境</h1><pre><code class="lang-shell">sudo dnf groupinstall &quot;Development Tools&quot; -y
sudo dnf install gmp gmp-devel mpfr mpfr-devel libmpc libmpc-devel isl isl-devel zlib-devel wget make bzip2 -y</code></pre><p><strong>若系统未提供默认的gcc与cmake则还需要安装gcc、g++与cmake</strong></p><pre><code class="lang-shell">sudo dnf install -y gcc g++ cmake</code></pre><h1>解压GCC源码包并进入目录</h1><h1>下载依赖库源码</h1><pre><code class="lang-shell">./contrib/download_prerequisites</code></pre><h1>创建构建目录并在其下进行编译</h1><pre><code class="lang-shell">cd ..
mkdir gcc-build
cd gcc-build</code></pre><h1>配置编译</h1><pre><code class="lang-shell">../gcc-14.2.0/configure \
  --prefix=/usr/local/gcc-14.2 \
  --disable-multilib \
  --enable-languages=c,c++ \
  --enable-checking=release</code></pre><p><strong>gcc-14.2.0 根据实际gcc版本及解压目录替换</strong></p><h1>编译</h1><pre><code class="lang-shell">make -j$(nproc)
make install</code></pre><h1>配置环境</h1><p>在.bashrc或.bash_profile(openEular)中添加</p><pre><code class="lang-shell">LD_LIBRARY_PATH=/usr/local/gcc14/lib64/:$LD_LIBRARY_PATH
export PATH
export LD_LIBRARY_PATH</code></pre><p><strong>通过alternatives管理版本切换时，无需将bin路径导出到PATH</strong></p><h1>版本选择配置</h1><pre><code class="lang-shell">sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/gcc-14.2/bin/gcc 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/local/gcc-14.2/bin/g++ 50
sudo update-alternatives --config gcc</code></pre><ul><li>--install 安装配置信息</li><li>/usr/bin/gcc 版本切换的注册可执行文件的地址，即生成的软连接位置</li><li>gcc 注册的组名, 管理使用</li><li>/usr/local/gcc-14.2/bin/gcc 实际的可执行文件路径</li><li>50 优先级，数值越大优先级越高</li><li>--slave /usr/bin/g++ g++  /usr/local/gcc-14.2/bin/g++ ： 绑定切换，切换gcc时自动切换g++</li></ul><h1>版本切换</h1><pre><code class="lang-shell">sudo update-alternatives --config gcc

# gcc为组名
# 根据提示输入序号来选择版本</code></pre>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://liar.org.cn/index.php/2025/08/20/27.html#comments</comments>
<wfw:commentRss>https://liar.org.cn/index.php/feed/category/Platform/2025/08/20/27.html</wfw:commentRss>
</item>
<item>
<title>CentOS 7 离线yum源</title>
<link>https://liar.org.cn/index.php/2024/09/17/19.html</link>
<guid>https://liar.org.cn/index.php/2024/09/17/19.html</guid>
<pubDate>Mon, 16 Sep 2024 19:07:00 +0000</pubDate>
<dc:creator>Lewis Ho</dc:creator>
<category><![CDATA[Linux]]></category>
<description><![CDATA[安装yum-utils、createrepo、httpdyum install -y httpd yum-utils createrepo开放httpd防火墙sudo firewall-cmd ...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<ol><li>安装yum-utils、createrepo、httpd</li></ol><pre><code>yum install -y httpd yum-utils createrepo</code></pre><ol start="2"><li>开放httpd防火墙</li></ol><pre><code>sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --zone=public --add-port=443/tcp --permanent
sudo firewall-cmd --reload</code></pre><ol start="3"><li>解决http无法访问子目录问题</li></ol><pre><code>#编辑/etc/sysconfig/selinux
vim /etc/sysconfig/selinux
#将SELINUX=enforcing修改为SELINUX=disabled
#执行命令使其生效
setenforce 0</code></pre><ol start="4"><li>启动http服务</li></ol><pre><code>systemctl restart httpd</code></pre><ol start="5"><li>查看当前yum源</li></ol><pre><code>yum repolist
#将列出 repo id          repo name信息
base/7/x86_64           xxxx
extras/7/x86_64         xxxx
updates/7/x86_64        xxxx</code></pre><ol start="6"><li>将repolist中所有repo id对应的包都下载到本地</li></ol><pre><code>reposync --repo repo-id -p /local-repo-folder-path/
#repo-id 为当前要下载的仓库id
#local-repo-folder-path为当前用于存储下载仓库资源的目录路径</code></pre><ol start="7"><li>将所有仓库资源下载完毕后，生成repodata索引依赖</li></ol><pre><code>cd /local-repo-folder-path/
createrepo repo-id/
#repor-id为仓库id</code></pre><ol start="8"><li>备份原有yum源配置并创建本地源的配置</li></ol><pre><code>cd /etc/yum.repos.d
mkdir bak
mv CentOS* bak
#创建本地源配置
vim local.repo
#文件内容
# [repo id]
# name=repo name
# baseurl=http://ip-address/centos/repo-name
# gpgcheck=0
# enabled=1

# 重复上述配置节点，为所有仓库添加配置节点</code></pre><ol start="9"><li>验证</li></ol><pre><code># 清理yum
yum clean all
# 建立yum缓存
yum makecache
# 查看仓库
yum repolist
# 更新yum
yum update
# 安装软件以验证</code></pre><ol start="10"><li>其他仓库离线源方式与前述步骤一直，如docker-ce等等</li><li>docker无法运行</li></ol><pre><code># 创建配置
sudo vim /etc/profile.d/docker.sh
# 内容如下
# export DOCKER_HOST=tcp://localhost:2375
source /etc/profile
source /etc/basrc

#配置启动文件
vim /lib/systemd/system/docker.service
#将ExecStart配置追加以下内容
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -H tcp://0.0.0.0:7654 原配置内容</code></pre>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://liar.org.cn/index.php/2024/09/17/19.html#comments</comments>
<wfw:commentRss>https://liar.org.cn/index.php/feed/category/Platform/2024/09/17/19.html</wfw:commentRss>
</item>
<item>
<title>gitlab-runner安装与配置</title>
<link>https://liar.org.cn/index.php/2024/08/26/18.html</link>
<guid>https://liar.org.cn/index.php/2024/08/26/18.html</guid>
<pubDate>Mon, 26 Aug 2024 08:46:10 +0000</pubDate>
<dc:creator>Lewis Ho</dc:creator>
<category><![CDATA[Linux]]></category>
<category><![CDATA[应用]]></category>
<description><![CDATA[gitlab-runner安装gitlab-runner容器使用gitlab.com安装部署指导手册下载相应gitlab-runner镜像并使用docker运行即可。gitlab-runner以...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h2>gitlab-runner安装</h2><h3>gitlab-runner容器</h3><ol><li>使用gitlab.com安装部署指导手册下载相应gitlab-runner镜像并使用docker运行即可。</li><li>gitlab-runner以容器的方式提供服务时，可在启动容器时通过<strong>-v</strong>将本地gitlab-runner/config.toml文件挂载到容器中，以提供认证等配置信息。<strong>对本地文件config.toml的修改将不能即时生效，需要重启容器。</strong></li></ol><h3>启动容器</h3><ol><li>以本地文件挂载方式启动容器</li></ol><pre><code class="lang-shell">docker run -d --name gitlab-runner --restart always \
     -v /srv/gitlab-runner/config:/etc/gitlab-runner \
     -v /var/run/docker.sock:/var/run/docker.sock \
     harbor.rjb.dgbc.net.cn/cs/gitlab-runner:latest</code></pre><ol start="2"><li>以docker volumes方式启动容器</li></ol><pre><code class="lang-shell"># 创建docker volume
docker volume create gitlab-runner-config

# 使用volume启动runner
docker run -d --name gitlab-runner --restart always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v gitlab-runner-config:/etc/gitlab-runner \
    harbor.rjb.dgbc.net.cn/cs/gitlab-runner:latest</code></pre><h3>注册到gitlab</h3><pre><code class="lang-shell"># 本地文件挂载的注册指令
docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner harbor.rjb.dgbc.net.cn/cs/gitlab-runner register

# docker volume挂载的注册指令
docker run --rm -it -v gitlab-runner-config:/etc/gitlab-runner gitlab/gitlab-runner:latest register</code></pre><h2>gitlab-runner 访问镜像仓库</h2><p>gitlab-runner的docker runner在运行时需要访问镜像仓库并通过认证才能拉取镜像，故需要为runner指定镜像仓库的认证信息，认证信息将保存在gitlab-runner的<strong>DOCKER_AUTH_CONFIG</strong>环境变量中。</p><h3>获取docker登录镜像仓库的认证</h3><p>通过获取登录该仓库的认证配置信息，位于文件<strong>~/.docker/config.json</strong></p><p>登录指令:</p><pre><code class="lang-shell">docker login repository-url --username user --password passwd</code></pre><p>认证信息示例:</p><pre><code class="lang-json">{
        &quot;auths&quot;: {
                &quot;gitlab.com&quot;: {
                        &quot;auth&quot;: &quot;XXXXXXX&quot;
                },
                &quot;registry.gitlab.com&quot;: {
                        &quot;auth&quot;: &quot;XXXXXXX&quot;
                }
        }
}</code></pre><h3>项目级镜像仓库认证配置</h3><p>在项目的gitlab.yml文件的<strong>variables</strong>中指定<strong>DOCKER_AUTH_CONFIG</strong>的值:</p><pre><code class="lang-yml">stages:
 - test
variables:
    DOCKER_AUTH_CONFIG: &#039;{&quot;auths&quot;:{&quot;repository-url&quot;:&quot;repository-key&quot;}}&#039;</code></pre><h3>系统级镜像仓库认证配置</h3><p>在gitlab-runner的配置文件<strong>/etc/gitlab-ruuner/config.toml</strong>中增加<strong>DOCKER_AUTG_CONFIG</strong>环境变量的值，并重启runner使之生效</p><pre><code class="lang-toml">[[runners]]
 environment = [&#039;DOCKER_AUTH_CONFIG={ &quot;auths&quot;: { &quot;registry.gitlab.com&quot;: {&quot;auth&quot;: &quot;xxxxx&quot;}}}&#039;]</code></pre>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://liar.org.cn/index.php/2024/08/26/18.html#comments</comments>
<wfw:commentRss>https://liar.org.cn/index.php/feed/category/Platform/2024/08/26/18.html</wfw:commentRss>
</item>
<item>
<title>麒麟 V10-SP1-HWE-2303-x86_64(兆芯)版本 Qt 6.5.3 LTS开放源代码编译</title>
<link>https://liar.org.cn/index.php/2024/08/26/17.html</link>
<guid>https://liar.org.cn/index.php/2024/08/26/17.html</guid>
<pubDate>Mon, 26 Aug 2024 08:45:07 +0000</pubDate>
<dc:creator>Lewis Ho</dc:creator>
<category><![CDATA[Linux]]></category>
<category><![CDATA[应用]]></category>
<description><![CDATA[0. 环境要求1 建议先按需关闭麒麟操作系统的相关保护功能《麒麟V10关闭安全控制》2 编译环境要求：可用于编译的物理内存 + SWAP交换区 &gt; 40GB，同条件下，物理内存越大，编译速...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h2>0. 环境要求</h2><p>1 建议先按需关闭麒麟操作系统的相关保护功能<a href="http://wiki.cxx.rjb.dgbc.net.cn/index.php/2024/05/17/66.html">《麒麟V10关闭安全控制》</a></p><p>2 编译环境要求：</p><ul><li>可用于编译的物理内存 + SWAP交换区 &gt; 40GB，同条件下，物理内存越大，编译速度越快</li><li>可用于编译的磁盘空间 &gt;160GB</li><li>建议CPU核心数据 &gt;8核</li></ul><h2>1. 添加其他软件源</h2><p>麒麟V10-SP1-HWE-2303-x86_64(兆芯)版本操作系统（简述为麒麟操作系统）为基于Ubuntu 18.04(bionic)发行版改进，该版本麒麟操作系统可以使用Ubuntu 18.04(bionic)及同内核版本的其他linux软件源。Qt 6.5.3 LTS开放源代码编译所需的部分组件在麒麟官方的软件源中不存在或版本过低，如gcc、g++、cmake等，故首先为麒麟操作系统添加其他可用的软件源。</p><h3>1.1 安装apt tools</h3><p>首先安装<strong>software-properties-common</strong>以便添加源时加入对应源的公钥。</p><pre><code class="lang-shell">sudo apt-get install -y software-properties-common</code></pre><h3>1.2 添加其他源到apt</h3><p>此处添加阿里云和PPA到源列表。</p><p><strong>请注意，麒麟操作系统默认源会被操作系统定时检测及还原，故请勿在默认源文件(/etc/apt/source.list)中增加其他源配置。而应在/etc/apt/source.list.d路径下为每个源单独配置一份配置文件。</strong></p><pre><code class="lang-shell"># 添加阿里云 Ubuntu 18.04(bionic)源
FILE_SOURCE_LIST=/etc/apt/sources.list.d/aliyun.list
echo deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse &gt; ${FILE_SOURCE_LIST}
echo deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse &gt;&gt; ${FILE_SOURCE_LIST}
echo deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse &gt;&gt; ${FILE_SOURCE_LIST}
echo deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse &gt;&gt; ${FILE_SOURCE_LIST}
echo deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse &gt;&gt; ${FILE_SOURCE_LIST}
# 添加PPA
FILE_SOURCE_LIST=/etc/apt/sources.list.d/ubuntu-toolchain-r-test.list
echo deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu bionic main &gt;&gt; ${FILE_SOURCE_LIST}
# 添加PPA公钥
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1E9377A2BA9EF27F</code></pre><p>完成源配置的添加后，更新apt</p><pre><code class="lang-shell">sudo apt-get update
sudo apt-get upgrade</code></pre><h2>2. 安装编译环境</h2><p><strong>请注意，若执行某条安装命令失败，请在安装失败后先对apt进行缓存更新，然后尝试重新执行安装命令。若此时依然不行，则核对安装的包名是否正确或安装以对应组件库名打头的所有包。</strong></p><h3>2.1 前期使用的环境</h3><p>使用高版本的gcc、g++、cmake、openssl需要先安装系统版本默认支持的版本作为基础版本，然后再进行高版本的安装或利用基础版本对高版本的源码进行编译安装以达到使用高版本的目的。</p><h3>2.2 安装基础编译环境</h3><h4>2.2.1 安装gcc(9.x)、g++(9.x)、cmake</h4><pre><code class="lang-shell">sudo apt-get install -y gcc g++ cmake</code></pre><h4>2.2.2 安装openssl 2.x</h4><pre><code class="lang-shell">sudo apt-get install -y \
    libssl-dev \
    libgcrypt20-dev \
    libcrypto++6 \
    libcrypto++-dev \
    openssl</code></pre><h4>2.2.3 安装clang-12、llvm-12</h4><pre><code class="lang-shell">sudo apt-get install -y llvm-10 clang-10 llvm-10-dev libclang-10-dev
#变更为clang-12、llvm-12
sudo apt-get install -y llvm-12 clang-12 llvm-12-dev libclang-12-dev
#若第一次执行安装clang-12版本失败，则先对apt进行更新</code></pre><h3>2.3 安装高版本编译环境</h3><h4>2.3.1 安装gcc-13和g++-13</h4><p><strong>请注意安装前提：需先安装clang-12和llvm-12。</strong></p><pre><code class="lang-shell"># 安装gcc-13
sudo apt-get install -y gcc-13
# 修改默认的gcc版本
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 60
# 检查安装及修改默认版本后的gcc版本号
gcc --version
# 安装g++-13
sudo apt-get install -y g++-13
# 修改默认g++版本
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 60
# 检查版本
g++ --version</code></pre><p><strong>请注意，若在多次通过update-alternatives修改默认gcc和g++无法生效，请使用update-alternatives --config来手动确认选择的版本。</strong></p><pre><code class="lang-shell"># 输入下述命令后，按提示信息选择列出的gcc编译器序号
sudo update-alternatives --config gcc
# 输入下述命令后，按提示信息选择列出的g++编译器序号
sudo update-alternatives --config g++</code></pre><h4>2.3.2 安装OpenSSL 3.x</h4><ol><li>在<a href="">ftp://192.168.0.61:50000/devenv/qtools/src，用户名: shared, 密码: 7474741</a>获取openssl-3.3.0.tar.gz源码包<strong>openssl-3.3.0.tar.gz</strong>。</li></ol><p><strong>请注意需要编译安装debug和release两个版本，并且请勿将两个版本安装在同一路径下</strong></p><pre><code class="lang-shell">#在openssl 3.x源码目录下执行命令 编译release版本并安装到默认目录
mkdir build-release &amp;&amp; cd build-release
../config
#使用默认安装路径即可
make &amp;&amp; make install

#在openssl 3.x源码目录下执行命令 编译debug版本并安装到 /usr/local/lib64d/openssl目录
mkdir build-debug &amp;&amp; cd build-debug
../Configure --prefix=/usr/local/lib64d/openssl --debug
make &amp;&amp; make install

# 请注意，此处仅是编译并安装到了系统中，不论是通过apt包安装的openssl还是自行编译安装的openssl，都没有自动建立ldconfig缓存，需要手动添加才能正常使用</code></pre><h4>2.3.3 安装CMake 3.29.x</h4><ol><li>在<a href="">ftp://192.168.0.61:50000/devenv/qtools/src，用户名: shared, 密码: 7474741</a>获取CMake 3.29.3源码包<strong>cmake-3.29.3.tar.gz</strong>。</li><li>解压缩cmake-3.29.3.tar.gz，并进入解压缩后的源码目录</li><li><p>执行如下命令进行编译、安装及版本检查</p><pre><code class="lang-shell"># 在解压缩后的cmake 3.29.x源码目录下执行
./bootstrap
# 编译
make
# 安装
make install
# 版本检测（检测安装结果）
cmake --version</code></pre></li></ol><h4>2.3.4 安装Node.js 20.x</h4><p>执行以下命令以安装Node.js 20.x。</p><pre><code class="lang-shell"># 若需更新版本可通过打开链接获取最新的指令：https://deb.nodesource.com/
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash - 
sudo apt-get install -y nodejs</code></pre><h4>2.3.5 安装调试器GDB</h4><p>当前使用源中最高版本10.x,若需要使用13.x或14.x请使用源码编译安装。</p><pre><code class="lang-shell">apt-get install -y gdb</code></pre><h2>3. 安装其他组件</h2><p>安装编译Qt源码所需的其他环境(为方便执行指令，将存在安装失败可能的包安装指令拆分为单独一条)。</p><pre><code class="lang-shell"># 安装perl git ninja
sudo apt-get install -y perl git ninja-build
# 安装python3、python html5lib
sudo apt-get install -y python3 python-is-python3 python3-pip python3-pexpect
# Qt启用WebEngine则必须html5lib
pip install html5lib
# 安装enssential nss3
sudo apt-get install -y build-essential libnss3 libnss3-dev
# 更新pthread和动态加载相关的库，也可以通过升级libc的方式来升级
sudo apt-get install -y libpthread*
sudo apt-get install -y ldd
# Qt开启WebEngine组件必须
sudo apt-get install -y gperf bison flex ruby
# Qt开启WebEngine组件必须安装xcb和x11系列组件
#【请注意】必须先安装xcb-protocol组件，否则将导致部分xcb组件库安装失败
sudo apt-get install -y xcb-proto
# 先全系安装libxcb和libx11打头的库
sudo apt-get install -y libxcb*
sudo apt-get install -y libx11*
# proxy, 若安装失败，则先进行apt-get update，然后再尝试
sudo apt-get install -y libproxy1v5 libproxy-dev
# update后仍然不行，则安装libproxy打头的所有库
#sudo apt-get install -y libproxy*
# GSSAPI，若安装失败，则先进行apt-get update，然后再尝试
sudo apt-get install -y libgssapi-krb5-2 libgssapi-krb5-dev
# update后仍然不行，则安装libgssapi打头的所有库
#sudo apt-get install -y libgssapi*
# 安装directFB
sudo apt-get install -y directfb*
# 安装vulkan
sudo apt-get install -y libvulkan*
# 安装harfBuzz，若安装失败，则进行apt-get update，然后再尝试
sudo apt-get install -y libharfbuzz-dev
# update后仍然不行，则安装libharfbuzz打头的所有库
#sudo apt-get install -y libharfbuzz*
# 安装strp
sudo apt-get install -y libsrtp*
# 安装libatspi2
sudo apt-get install -y libatspi2.0-dev
# 安装蓝牙库
sudo apt-get install -y libbluetooth-dev
# 安装ICU
sudo apt-get install -y libicu-dev
#【非必须】Jasper需要手动通过包进行安装,仅ARM需要
#sudo apt-get install -y libjasper-dev
#-jasper arm only
#sudo apt install libassimp-dev depend on jasper
#sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
#-gstreamer -gstreamer-no-multimonitor -I/usr/include/gstreamer-1.0 -L/usr/lib/x86_64-linux-gnu -lgstreamer-1.0
#PKG_CONFIG=&quot;/usr/bin/pkg-config&quot; PKG_CONFIG_PATH=&quot;/path/to/your/gstreamer/pkgconfig/files&quot;
# 安装llTTNG，【请务必保证指令中的包顺序，否则将无法安装】
# 包安装顺序可参考 https://lttng.org 在debian类系统上安装的指导手册
sudo apt-get install -y lttng-modules-dkms liblttng-ust-dev lttng-tools
# 批量安装以下组件
sudo apt-get install -y libcups2-dev \
    libcap-dev \
    libdrm-dev \
    libfontconfig1-dev \
    libfreetype6-dev \
    freeglut3-dev \
    dbus \
    libdbus-1-dev \
    libdbus-glib-1-dev \
    libudev-dev \
    libudev1 \
    libpci-dev \
    libasound2-dev \
    libgstreamer1.0-dev \
    libgstreamer-plugins-base1.0-dev \
    libbz2-dev \
    libb2-dev \
    libatkmm-1.6-dev \
    libinput-dev \
    zstd \
    libzstd-dev \
    libsystemd-dev \
    libgbm-dev \
    libjpeg-dev \
    libmd4c-dev \
    libmtdev-dev \
    libwayland-dev \
    libsm6 \
    libsm-dev \
    libice6 \
    libice-dev \
    libdouble-conversion-dev \
    libpq-dev \
    libsqlite3-dev \
    libgtk-3-dev \
    libwebp-dev \
    libmng-dev \
    libmng2 \
    gyp \
    libjsoncpp-dev \
    libopus-dev \
    libminizip-dev \
    libavutil-dev \
    libavformat-dev \
    libavcodec-dev \
    libevent-dev \
    libvpx-dev \
    libsnappy-dev \
    libre2-dev \
    libprotobuf-dev \
    protobuf-compiler \
    libgssglue-dev \
    libtiff-dev \
    gawk \
    wget \
    diffstat \
    texinfo \
    chrpath \
    socat \
    cpio \
    xz-utils \
    debianutils \
    iputils-ping \
    liblz4-tool \
    file \
    locales
# 安装OpenGL 2.x
sudo apt-get install -y \
    mesa-common-dev \
    libegl1-mesa-dev \
    libopengl-dev \
    libgl1-mesa-dev \
    libglu1-mesa-dev \
    libglfw3-dev \
    libgles2-mesa-dev \
    libglib2.0-0 \
    libglib2.0-dev \
    libegl1-mesa \
    libsdl1.2-dev
# 按组件名安装所必须的xcb组件，避免部分组件在批量安装时未安装
sudo apt-get install -y \
    libxcb1-dev \
    libxcb-glx0-dev \
    libxcb-icccm4-dev \
    libxcb-image0-dev \
    libxcb-keysyms1-dev \
    libxcb-randr0-dev \
    libxcb-render0-dev \
    libxcb-render-util0-dev \
    libxcb-shape0-dev \
    libxcb-shm0-dev \
    libxcb-sync-dev \
    libxcb-util-dev \
    libxcb-util0-dev \
    libxcb-xfixes0-dev \
    libxcb-xinerama0-dev \
    libxcb-xkb-dev \
    libxcb-imdkit0 \
    libxcb-imdkit-dev \
    libxcb-composite0-dev \
    libxcb-composite0 \
    libxcb-cursor0 \
    libxcb-cursor-dev \
    libxcb-damage0 \
    libxcb-damage0-dev \
    libxcb-doc \
    libxcb-dpms0 \
    libxcb-dpms0-dev \
    libxcb-dri2-0-dev \
    libxcb-dri3-dev \
    libxcb-ewmh2 \
    libxcb-ewmh-dev \
    libxcb-glx0-dev \
    libxcb-present-dev \
    libxcb-record0 \
    libxcb-record0-dev \
    libxcb-res0-dev \
    libxcb-screensaver0 \
    libxcb-screensaver0-dev \
    libxcb-xf86dri0 \
    libxcb-xf86dri0-dev \
    libxcb-xinput-dev \
    libxcb-xrm0 \
    libxcb-xrm-dev \
    libxcb-xtest0 \
    libxcb-xtest0-dev \
    libxcb-xv0-dev \
    libxcb-xvmc0 \
    libxcb-xvmc0-dev
# 按组件名安装所必须的x11组件，避免部分组件在批量安装时未安装
sudo apt-get install -y \
    libgstreamer1.0-dev \
    libhunspell-dev \
    libpulse-dev \
    libts-dev \
    libxtst-dev \
    libxslt-dev \
    libxslt1-dev \
    libxss-dev \
    libx11-dev \
    libx11-xcb-dev 
    libxcomposite-dev \
    libxcursor-dev \
    libxdamage-dev \
    libxdamage1 \
    libxext-dev \
    libxfixes-dev \
    libxi-dev \
    libxkbcommon-doc \
    libxkbcommon-dev \
    libxkbcommon-x11-dev \
    libxkbcommon-tools \
    libxkbfile-dev \
    libxrandr-dev \
    libxrender-dev \
    libxshmfence-dev \
    libxshmfence1 \
    libx11-doc \
    libx11-freedesktop-desktopentry-perl \
    libx11-guitest-perl \
    libx11-keyboard-perl \
    libx11-protocol-other-perl \
    libx11-windowhierarchy-perl \
    libx11-xcb-perl\
    libxine2-bin \
    libxine2-dev \
    libxine2-ffmpeg \
    libxine2-misc-plugins \
    libxine2-plugins \
    libxproto-dev</code></pre><h3>4.1 开启额外选项需要安装的依赖组件</h3><ol><li>SCTP</li></ol><pre><code class="lang-shell">sudo apt-get install -y libsctp-dev</code></pre><ol start="2"><li>GSSAPI</li></ol><pre><code class="lang-shell">sudo apt-get install -y krb5-user krb5-config libkrb5-dev</code></pre><ol start="3"><li><p>brotli</p><pre><code class="lang-shell">sudo apt-get install -y brotli libbrotli-dev</code></pre></li><li><p>HiRes wheel support<br><strong>请注意，此组件安装后未能成功在配置过程中启用，此处仅记录作为后续解决问题的参考</strong></p><pre><code class="lang-shell">sudo apt-get install - y libinput10 libhidapi-dev</code></pre></li><li><p>directfb</p><pre><code class="lang-shell">sudo apt-get install -y libjpeg-dev libpng-dev libfreetype6-dev libfusion-dev libdirect-dev libdirectfb-dev</code></pre></li><li><p>mysql</p><pre><code class="lang-shell">sudo apt-get install -y libmysqlclient-dev</code></pre></li><li><p>ffmpeg</p><pre><code class="lang-shell">sudo apt-get install -y libavcodec-dev libavformat-dev libavutil-dev libswscale-dev</code></pre></li></ol><h2>5 编译&安装</h2><ol><li>在源码目录下创建build-debug用于配置和安装debug版本</li><li>在源码目录下创建build-release用于配置和安装release版本</li><li>以配置release版本为例</li></ol><p><strong>请注意, 配置编译时启用的组件越多，编译占用内存和交换区越大，耗时越长。</strong></p><pre><code class="lang-shell"># 设置QT插件调试，以便配置、编译过程输出详细错误信息
export QT_DEBUG_PLUGINS=1
# 配置编译
# 进入build-debug目录进行配置，release则进入build-release目录
../configure -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON \
    -xcb -xcb-xlib -bundled-xcb-xinput -xkbcommon \
    -fontconfig \
    -sm \
    -glib \
    -opengl es2 \
    -release \
    -opensource -confirm-license \
    -prefix ${PWD}/install \
    -nomake tests \
    -libproxy \
    -sctp \
    -libinput \
    -sql-mysql \
    -icu \
    -openssl-linked -I/usr/local/include -I/usr/include -L/usr/local/lib64 -L/usr/lib/x86_64-linux-gnu -openssl-runtime \
    -webengine-proprietary-codecs -webengine-developer-build -webengine-ffmpeg \
    -make examples \
    -force-debug-info \
    -separate-debug-info \
    -skip qtopcua
# 配置选项说明
# -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON, 指示使用CXX20标准
# -xcb -xcb-xlib -bundled-xcb-xinput -xkbcommon 此系列选项表示使用系统环境安装的xcb和x11组件；否则将自动检测，而自动检测下大概率会失败
# -fontconfig  表示使用系统安装的fontconfig库，否则将自动检测
# -sm 表示使用系统安装的libsm版本，否则将自动检测。在自动检测下，即使安装了满足要求的版本也无法找到SM
# -glib 表示使用系统安装的glib版本
# -opengl es2 表示使用系统安装的opengl版本库, es2表示启用ES2.0
# -release 表示编译release版本，-debug则表示编译debug版本。
#     请勿使用-debug-and-release而企图同时编译debug和release版本，该选项下不会生成完整的debug版本!
#     并且官方文档明确说明-debug-and-release仅适用于Windows平台编译，虽然在linux指定了也可以进行编译。
#
# -prefix ${PWD}/install 用于指定安装路径，此处${PWD}/install表示为当前路径下的install目录
# -opensource -confirm-license 表示确认使开源协议
# -nomake tests 表示不编译tests内容
#
# -openssl-linked -I/usr/local/include -I/usr/include -L/usr/local/lib64 -L/usr/lib/x86_64-linux-gnu -openssl-runtime，用于指定安装的OpenSSL 3.x以开启OpenSS 3
#   1. 请注意，本选项中-I指定的头文件路径和-L指定的库文件路径需要根据当前的目标编译版本debug或release，修改为对应debug或release的安装路径
#   2. 同时，需要在/etc/ld.so.conf中添加当前将要使用的编译安装的OpenSSL 3.x的debug或release动态库路径，然后执行ldconfig更新ld缓存再进行编译
#
# -libproxy 表示使用系统安装的proxy，并开启编译选项
# -sctp 表示使用系统安装的SCTP，并开启编译选项
# -libinput 表示使用系统安装的input
# -sql-mysql 表示使用系统安装的MySql并启用编译选项
# -icu 表示使用系统安装的ICU库
# -webengine-proprietary-codecs -webengine-developer-build -webengine-ffmpeg，表示启用WebEngine的codecs、developer、ffmpeg
#
# -make examples 表示编译示例项目
#
# -force-debug-info 标识强制为release生成debug信息
# -separate-debug-info 将调试信息单独生成存储
#
# -skip qtopcua 表示不编译qtopcua组件。当前由于启用OpenSSL 3.x导致无法检测到OpenSSL 1.1 和2.x，编译qtopcua依赖的open62541时将无法找到部分openssl的定义，故不进行qtopcua的编译
#   若需要编译qtopcua组件，可以在完成Qt编码编译后再单独使用OpenSSL 1.1和2.x进行编译
#   也可以自行下载支持OpenSSL 3.x的open62541 1.4版本，并在configure时指定open62541的安装信息，如“-DINPUT_open62541=system -DOPEN62541_INCDIR=/usr/local/include/open62541 -DOPEN62541_LIBDIR=/usr/local/lib”</code></pre><p><strong>请注意, 若在配置中提示xcb和x11部分组件检测不到，请尝试重新单独安装所报错的组件，即使前序步骤已经成功安装了它们。如：</strong></p><ul><li>sudo apt-get install -y libxcomposite-dev</li><li>sudo apt-get install -y libxcursor-dev</li><li>sudo apt-get install -y libxrandr-dev</li><li>sudo apt-get install -y libxi-dev</li><li>sudo apt-get install -y libxproto-dev</li><li>sudo apt-get install -y libxshmfence-dev</li><li>sudo apt-get install -y libxtst-dev</li></ul><ol start="4"><li>建议每次配置时删除前一次的配置（即build-debug或build-release目录）再重新进行配置</li><li>编译和安装</li></ol><pre><code class="lang-shell"># 编译，未指定核心数量时由工具链自行调度
# 可根据编译环境条件在 --parallel后显式指定用于编译的CPU核心数量，如 
# cmake --build . --parallel 12
cmake --build . --parallel
# 安装，将安装在配置时的-prefix指定的路径下
cmake --install .</code></pre><ol start="6"><li><p>编译Qt帮助文档<br>完成和编译源码时一致的配置编译操作后，在build-*目录下执行:</p><pre><code class="lang-shell"># 仅编译docs
ninja docs
# 编译完成后安装docs
ninja install_docs</code></pre></li></ol><h2>6. Qt源码编译中的坑</h2><p>6.1 Qt6.5.3源码中的编码错误</p><p>6.1.1 编译过程中部分文件报错uint32_t不是std中的符号</p><p>如qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp文件<br>问题原因：该文件引用的是c规范的头文件stdint.h而非c++规范的cstdint，导致类型std::uint32_t不属于std命名空间<br>解决版本：修改源码中的#include &lt;stdint.h&gt;为#include <cstdint></p><p>6.1.2 open62541找不到OpenSSL EVxxx定义</p><p>该问题目前尚未解决，可采取以下方法:</p><pre><code>1. 使用-skip qtopcua的方式跳过open62541的编译
2. 可以使用自行编译的支持OpenSSL 3.x的open62541 v1.4版本，并以指定系统安装版本的方式跳过Qt自带的open62541版本的编译（待验证）
3. 不使用OpenSSL 3.x而使用OpenSSL 1.1和2.x进而不会因为版本引起问题（待验证）
</code></pre><p>编译open62541请参照如下方法：</p><pre><code class="lang-shell"># 下载open62541 源码, 如1.4的
#使用指定openssl库路径去编译open62541
export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
export CMAKE_PREFIX_PATH=/usr/local/include:$CMAKE_PREFIX_PATH
# 创建一个编译目录build在其下进行配置、编译
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DUA_ENABLE_ENCRYPTION=ON -DUA_ENABLE_ENCRYPTION_OPENSSL=ON ..
make
make install</code></pre>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://liar.org.cn/index.php/2024/08/26/17.html#comments</comments>
<wfw:commentRss>https://liar.org.cn/index.php/feed/category/Platform/2024/08/26/17.html</wfw:commentRss>
</item>
<item>
<title> 麒麟 V10-SP1-HWE-2303-x86_64(兆芯)版本 Qt 6.5.3开发环境</title>
<link>https://liar.org.cn/index.php/2024/08/26/16.html</link>
<guid>https://liar.org.cn/index.php/2024/08/26/16.html</guid>
<pubDate>Mon, 26 Aug 2024 08:44:17 +0000</pubDate>
<dc:creator>Lewis Ho</dc:creator>
<category><![CDATA[Linux]]></category>
<category><![CDATA[应用]]></category>
<description><![CDATA[Qt 6.5.3源码编译请参考《麒麟 V10-SP1-HWE-2303-x86_64(兆芯)版本 Qt 6.5.3 LTS开放源代码编译》开发环境以VMware虚拟机提供:由于虚拟机有50GB左...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p><strong>Qt 6.5.3源码编译请参考<a href="http://wiki.cxx.rjb.dgbc.net.cn/index.php/2024/05/17/67.html">《麒麟 V10-SP1-HWE-2303-x86_64(兆芯)版本 Qt 6.5.3 LTS开放源代码编译》</a></strong></p><ol><li>开发环境以VMware虚拟机提供:</li></ol><p><strong>由于虚拟机有50GB左右，故未进行压缩，请直接下载kylin-v10-amd64整个目录。</strong></p><pre><code class="lang-note">地址：ftp://192.168.0.61:50000/devenv/qtools/release/kylin-v10-amd64
FTP用户名：shared
FTP密码: 7474741</code></pre><ol start="2"><li>虚拟机开发环境信息</li></ol><p>2.1 帐户密码</p><table><thead><tr><th>用户名</th><th>密码</th></tr></thead><tbody><tr><td>dev</td><td>7</td></tr><tr><td>root</td><td>7</td></tr></tbody></table><p>请自行按需修改用户名和密码</p><p>2.2 组件信息</p><table><thead><tr><th>软件</th><th>版本</th><th>安装路径</th></tr></thead><tbody><tr><td>Qt Creator</td><td>13.01</td><td>/home/dev/opt/qtcreator-13.0.1</td></tr><tr><td>Qt SDK</td><td>6.5.3 LTS</td><td>/home/dev/opt/qt-6.5.3</td></tr><tr><td>gcc</td><td>13.1.0</td><td>/usr/bin/x86_64-linux-gnu-gcc-13</td></tr><tr><td>g++</td><td>13.1.0</td><td>/usr/bin/x86_64-linux-gnu-g++-13</td></tr><tr><td>cmake</td><td>3.29.3</td><td>/usr/local/bin</td></tr><tr><td>gdb</td><td>10.2</td><td>/usr/bin/gdb</td></tr><tr><td>python</td><td>3.8.10</td><td>/usr/bin/python3</td></tr><tr><td>node.js</td><td>20.13.1</td><td>/usr/bin/node</td></tr><tr><td>openssl</td><td>3.3.0.9</td><td>/usr/local/bin</td></tr><tr><td>openssl</td><td>1.1.1f</td><td>/usr/bin</td></tr><tr><td>clang</td><td>12.x</td><td>/usr/lib</td></tr><tr><td>llvm</td><td>12.x</td><td>/usr/lib</td></tr></tbody></table>
]]></content:encoded>
<slash:comments>3</slash:comments>
<comments>https://liar.org.cn/index.php/2024/08/26/16.html#comments</comments>
<wfw:commentRss>https://liar.org.cn/index.php/feed/category/Platform/2024/08/26/16.html</wfw:commentRss>
</item>
<item>
<title>调整系统最大文件描述符限制</title>
<link>https://liar.org.cn/index.php/2024/08/26/15.html</link>
<guid>https://liar.org.cn/index.php/2024/08/26/15.html</guid>
<pubDate>Mon, 26 Aug 2024 08:42:53 +0000</pubDate>
<dc:creator>Lewis Ho</dc:creator>
<category><![CDATA[Linux]]></category>
<description><![CDATA[用户级别文件描述符数量限制查看当前用户的用户级别最大文件描述符数量限制# 查看当前会话的最大文件描述符限制ulimit -n# 此命令会输出当前的软限制大小，如“1024，表示当前用户可以打开的...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h2>用户级别文件描述符数量限制</h2><h3>查看当前用户的用户级别最大文件描述符数量限制</h3><pre><code class="lang-shell"># 查看当前会话的最大文件描述符限制
ulimit -n
# 此命令会输出当前的软限制大小，如“1024，表示当前用户可以打开的文件（包括TCP套接字）的最大数量</code></pre><h3>临时修改当前用户的用户级别最大文件描述符数量限制（仅影响当前会话)</h3><pre><code class="lang-shell"># 通过以下指令并指定欲调整到的目标大小来临时调整
ulimit -n 目标大小

# 调整完成后可再次通过 ulimit -n来检查是否生效</code></pre><h3>永久性调整用户级别的最大文件描述符数量限制</h3><p>先编辑/etc/security/limits.conf文件，修改或增加以下内容</p><pre><code># 针对所有用户
# * 表示匹配所有用户名
# soft 表示为软限制
# hard表示为硬限制
# 1048576 为限制大小

* soft 1048576
* hard 1048576

# 针对指定用户进行调整时，仅需要将 * 替换为具体的用户名，如dev
dev soft 1048576
dev hard 1048576</code></pre><p>再修改/etc/pam.d/common-session，增加或修改以下内容</p><pre><code class="lang-shell"># 调整 session配置使用户登录时自动加载文件描述符限制
session required pam_limits.so</code></pre><p>然后重启操作系统使配置更新，完成重启后可再次通过命令确认调整内容是否生效。</p><h2>系统级别文件描述符数量限制</h2><h3>查看系统文件描述符限制</h3><pre><code class="lang-shell">cat /proc/sys/fs/file-max
# 或
sysctl fs.file-max</code></pre><h4>临时调整系统文件描述符限制</h4><pre><code class="lang-shell"># 临时修改，重启操作系统后失效
sudo sysctl -w fs.file-max=目标大小</code></pre><h4>永久调整系统文件描述符限制</h4><pre><code class="lang-shell"># 编辑 /etc/sysctl.conf，增加或修改以下内容
fs.file-max =  目标大小

# 使用以下命令或重启操作系统使其生效
sysctl -p</code></pre><h3>调整进程的TCP连接数量限制</h3><pre><code class="lang-shell"># 使用sysctl -p命令时的输出结果中包含TCP的连接数量限制
# 如net.core、net.ipv4等信息

# 查看TCP半连接状态的队列大小限制（即等待连接的最大队列长度)
sysctl net.ipv4.tcp_max_syn_backlog

# 查看允许完成立的最大连接数量限制
sysctl net.core.somaxconn

# 查看允许使用的端口范围
sysctl net.ipv4.ip_local_port_range</code></pre><h4>临时调整</h4><pre><code class="lang-shell">sudo sysctl -w net.ipv4.tcp_max_syn_backlog=目标大小
sudo sysctl -w net.core.somaxconn=目标大小</code></pre><h4>永久调整</h4><pre><code class="lang-shell"># 编辑/etc/sysctl.conf文件，增加或调整以下内容
net.ipv4.tcp_max_syn_backlog = 目标大小
net.core.somaxconn = 目标大小

# 使用sysctl -p或重启操作系统使其生效</code></pre>
]]></content:encoded>
<slash:comments>1</slash:comments>
<comments>https://liar.org.cn/index.php/2024/08/26/15.html#comments</comments>
<wfw:commentRss>https://liar.org.cn/index.php/feed/category/Platform/2024/08/26/15.html</wfw:commentRss>
</item>
<item>
<title>终端设置临时代理</title>
<link>https://liar.org.cn/index.php/2024/08/25/6.html</link>
<guid>https://liar.org.cn/index.php/2024/08/25/6.html</guid>
<pubDate>Sun, 25 Aug 2024 06:54:34 +0000</pubDate>
<dc:creator>Lewis Ho</dc:creator>
<category><![CDATA[Linux]]></category>
<description><![CDATA[export http_proxy=http://127.0.0.1:10809 # 使用http端口 export https_proxy=http://127.0.0.1:10809 exp...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<pre><code class="lang-shell"> export http_proxy=http://127.0.0.1:10809
 # 使用http端口
 export https_proxy=http://127.0.0.1:10809
 export all_proxy=socks5://127.0.0.1:10808</code></pre>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://liar.org.cn/index.php/2024/08/25/6.html#comments</comments>
<wfw:commentRss>https://liar.org.cn/index.php/feed/category/Platform/2024/08/25/6.html</wfw:commentRss>
</item>
</channel>
</rss>