<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>GuLu-ch</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://www.gululu.top/</id>
  <link href="https://www.gululu.top/" rel="alternate"/>
  <link href="https://www.gululu.top/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, GuLu-ch</rights>
  <subtitle>个人笔记与学习记录</subtitle>
  <title>咕噜的博客</title>
  <updated>2026-09-24T02:00:00.000Z</updated>
  <entry>
    <author>
      <name>GuLu-ch</name>
    </author>
    <category term="技术笔记" scheme="https://www.gululu.top/categories/%E6%8A%80%E6%9C%AF%E7%AC%94%E8%AE%B0/"/>
    <category term="CentOS" scheme="https://www.gululu.top/tags/CentOS/"/>
    <category term="mFAST" scheme="https://www.gululu.top/tags/mFAST/"/>
    <category term="FAST" scheme="https://www.gululu.top/tags/FAST/"/>
    <category term="STEP" scheme="https://www.gululu.top/tags/STEP/"/>
    <category term="行情数据" scheme="https://www.gululu.top/tags/%E8%A1%8C%E6%83%85%E6%95%B0%E6%8D%AE/"/>
    <content>
      <![CDATA[<p>本文以 CentOS 7.9 服务器为例，介绍从源码编译安装 <strong>mFAST</strong> 库的完整过程。mFAST 是 Object Computing 公司开源的 <strong>FAST（FIX Adapted for STreaming）协议</strong>实现，用于证券交易数据的快速编码 &#x2F; 解码，我的日常开发就是基于它解析交易所行情数据。整个流程包括：激活 devtoolset-8 编译环境 → 安装基础依赖 → 安装新版 CMake → 源码编译 Boost → 下载并编译 mFAST → 验证结果。</p><h2 id="1-背景：交易所行情协议与-mFAST"><a href="#1-背景：交易所行情协议与-mFAST" class="headerlink" title="1. 背景：交易所行情协议与 mFAST"></a>1. 背景：交易所行情协议与 mFAST</h2><p>国内证券市场的行情数据由交易所通过专用协议推送，其中两条技术路线最具代表性：</p><ul><li><strong>深交所 STEP（Securities Trading Exchange Protocol）</strong>：基于 FIX 5.0 SP2 的文本化协议，采用 <code>Tag=Value</code> 编码，主要提供 Level I 行情（买卖五档盘口、成交汇总等），约 3 秒一次快照，通过 TCP 推送。</li><li><strong>上交所 FAST（FIX Adapted for STreaming）</strong>：在 STEP 会话层之上叠加 FAST 二进制压缩编码，主要提供 Level II 行情（十档盘口、逐笔成交、逐笔委托等），时间精度可达 10ms 级，通常通过 UDP 组播推送。</li></ul><p>FAST 的压缩能力来自停止位编码、存在位图（PMap）以及差值（delta）、增量等字段操作符，因此解码时不能只看单条报文，还需要配套的模板文件与字典状态，这也正是需要专门的解码库的原因。<strong>mFAST</strong> 就是这类库：它支持模板驱动的高性能 FAST 编解码，我在日常工作中用它解析交易所行情数据，并在其基础上做行情转发与策略接入。</p><blockquote><p>关于 STEP 与 FAST 的协议细节与对比，可参考：<a href="https://blog.csdn.net/weixin_41544125/article/details/159979190">中国证券交易所行情协议深度解析：STEP vs FAST 的技术演进与实践</a>。</p></blockquote><p><strong>为什么需要这些依赖：</strong></p><ul><li>mFAST 使用 CMake 构建，最低要求 <strong>CMake 3.23</strong>，而 CentOS 7 自带版本过低</li><li>mFAST 依赖 <strong>Boost</strong> 库（示例使用 1.82.0），并依赖 <strong>tinyxml2</strong>（通过 git submodule 拉取）</li><li>编译需要较新的 gcc &#x2F; g++（使用上篇搭建的 devtoolset-8，gcc 8.3.1）</li></ul><p><strong>适用场景：</strong></p><ul><li>解析上交所 &#x2F; 深交所等交易所的 STEP &#x2F; FAST 行情与交易数据</li><li>需要 FAST 协议高速编解码的量化 &#x2F; 交易系统开发</li><li>其他依赖 mFAST 库的 C++ 项目</li></ul><p><strong>前置条件：</strong></p><ul><li>已完成 <a href="/2026/09/23/centos79-cpp-env-devtoolset8/">CentOS 7.9 C++ 编译环境搭建（devtoolset-8）</a> 中的环境配置</li><li>具备 root 权限，服务器可访问外网（需从 GitHub 下载源码）</li><li>磁盘空间充足（Boost 源码编译建议预留 5GB 以上）</li></ul><p><strong>整体流程：</strong> 激活编译环境 → 安装基础依赖 → 安装新版 CMake → 编译 Boost → 下载 mFAST 源码 → 编译安装 → 验证目录结构</p><h2 id="2-激活编译环境"><a href="#2-激活编译环境" class="headerlink" title="2. 激活编译环境"></a>2. 激活编译环境</h2><p>进入 devtoolset-8 环境（gcc 8.3.1）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">scl <span class="built_in">enable</span> devtoolset-8 bash</span><br></pre></td></tr></table></figure><p>然后查看当前的 gcc &#x2F; g++ 版本：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">gcc -v</span><br><span class="line">g++ -v</span><br></pre></td></tr></table></figure><p><img src="/img/mfast-gcc-version.webp" alt="gcc &#x2F; g++ 版本输出（8.3.1）"></p><p>确认输出为 <code>gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC)</code> 即可继续；若显示 4.8.5，说明未激活成功。</p><h2 id="3-安装基础编译依赖"><a href="#3-安装基础编译依赖" class="headerlink" title="3. 安装基础编译依赖"></a>3. 安装基础编译依赖</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">yum install -y \</span><br><span class="line">    git \</span><br><span class="line">    make \</span><br><span class="line">    autoconf \</span><br><span class="line">    automake \</span><br><span class="line">    libtool \</span><br><span class="line">    wget \</span><br><span class="line">    tar \</span><br><span class="line">    gzip \</span><br><span class="line">    bzip2</span><br></pre></td></tr></table></figure><p>各工具用途：</p><ul><li><code>git</code>：拉取 mFAST 源码及子模块</li><li><code>make</code> &#x2F; <code>autoconf</code> &#x2F; <code>automake</code> &#x2F; <code>libtool</code>：编译构建工具链</li><li><code>wget</code>：下载 CMake、Boost 源码包</li><li><code>tar</code> &#x2F; <code>gzip</code> &#x2F; <code>bzip2</code>：解压各类源码包</li></ul><h2 id="4-安装新版-CMake"><a href="#4-安装新版-CMake" class="headerlink" title="4. 安装新版 CMake"></a>4. 安装新版 CMake</h2><p>mFAST 构建最低需要 <strong>CMake 3.23</strong>，而 CentOS 7 自带的 CMake 版本过低，无法满足要求，因此需要单独安装新版 CMake。示例使用官方预编译的通用二进制包 <strong>3.31.8</strong>（免编译，解压即用）。</p><h3 id="4-1-下载并解压"><a href="#4-1-下载并解压" class="headerlink" title="4.1 下载并解压"></a>4.1 下载并解压</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">mkdir</span> /root/src</span><br><span class="line"></span><br><span class="line"><span class="built_in">cd</span> /root/src</span><br><span class="line"></span><br><span class="line">wget https://github.com/Kitware/CMake/releases/download/v3.31.8/cmake-3.31.8-linux-x86_64.tar.gz</span><br><span class="line"></span><br><span class="line">tar -zxvf cmake-3.31.8-linux-x86_64.tar.gz</span><br><span class="line"></span><br><span class="line"><span class="built_in">mv</span> cmake-3.31.8-linux-x86_64 /opt/cmake</span><br></pre></td></tr></table></figure><p>说明：统一放在 <code>/root/src</code> 下载，解压后移动到 <code>/opt/cmake</code>，后续通过 PATH 引用。</p><h3 id="4-2-配置环境变量（临时）"><a href="#4-2-配置环境变量（临时）" class="headerlink" title="4.2 配置环境变量（临时）"></a>4.2 配置环境变量（临时）</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">export</span> PATH=/opt/cmake/bin:<span class="variable">$PATH</span></span><br></pre></td></tr></table></figure><h3 id="4-3-永久生效（推荐）"><a href="#4-3-永久生效（推荐）" class="headerlink" title="4.3 永久生效（推荐）"></a>4.3 永久生效（推荐）</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cat</span> &gt;/etc/profile.d/cmake.sh &lt;&lt;<span class="string">&#x27;EOF&#x27;</span></span><br><span class="line"><span class="built_in">export</span> PATH=/opt/cmake/bin:<span class="variable">$PATH</span></span><br><span class="line">EOF</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">source</span> /etc/profile.d/cmake.sh</span><br></pre></td></tr></table></figure><p>以后重新登录也会优先使用 <code>/opt/cmake/bin/cmake</code>。可用 <code>cmake --version</code> 验证版本。</p><h2 id="5-从源码安装-Boost"><a href="#5-从源码安装-Boost" class="headerlink" title="5. 从源码安装 Boost"></a>5. 从源码安装 Boost</h2><p>mFAST 依赖 Boost 库，这里使用 1.82.0 源码编译，并安装到指定目录 <code>/opt/boost</code>，避免污染系统默认路径。</p><h3 id="5-1-下载并解压"><a href="#5-1-下载并解压" class="headerlink" title="5.1 下载并解压"></a>5.1 下载并解压</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /root/src</span><br><span class="line"></span><br><span class="line">wget https://archives.boost.io/release/1.82.0/source/boost_1_82_0.tar.gz</span><br><span class="line"></span><br><span class="line">tar -zxf boost_1_82_0.tar.gz</span><br><span class="line"></span><br><span class="line"><span class="built_in">cd</span> boost_1_82_0</span><br></pre></td></tr></table></figure><p>确认解压结果：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">ls</span></span><br></pre></td></tr></table></figure><p>应该可以看到：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">boost</span><br><span class="line">libs</span><br><span class="line">tools</span><br><span class="line">bootstrap.sh</span><br></pre></td></tr></table></figure><h3 id="5-2-初始化构建系统"><a href="#5-2-初始化构建系统" class="headerlink" title="5.2 初始化构建系统"></a>5.2 初始化构建系统</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">./bootstrap.sh \</span><br><span class="line">    --prefix=/opt/boost</span><br></pre></td></tr></table></figure><p>成功后应该生成 <code>b2</code>、<code>bjam</code> 两个构建工具：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">./b2</span><br><span class="line">./bjam</span><br></pre></td></tr></table></figure><h3 id="5-3-编译并安装"><a href="#5-3-编译并安装" class="headerlink" title="5.3 编译并安装"></a>5.3 编译并安装</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">./b2 \</span><br><span class="line">    -j$(<span class="built_in">nproc</span>) \</span><br><span class="line">    toolset=gcc \</span><br><span class="line">    variant=release \</span><br><span class="line">    <span class="built_in">link</span>=shared \</span><br><span class="line">    runtime-link=shared \</span><br><span class="line">    threading=multi \</span><br><span class="line">    install</span><br></pre></td></tr></table></figure><ul><li><code>-j$(nproc)</code>：并行编译，使用全部 CPU 核心</li><li><code>toolset=gcc</code>：使用 gcc 编译器</li><li><code>variant=release</code>：编译 release 版本</li><li><code>link=shared</code> &#x2F; <code>runtime-link=shared</code>：生成并链接动态库</li><li><code>threading=multi</code>：开启多线程支持</li></ul><p>因为前面已通过 <code>--prefix</code> 设置安装目录，所以最终会安装到 <code>/opt/boost</code>。</p><h3 id="5-4-验证安装"><a href="#5-4-验证安装" class="headerlink" title="5.4 验证安装"></a>5.4 验证安装</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep BOOST_LIB_VERSION /opt/boost/include/boost/version.hpp</span><br></pre></td></tr></table></figure><p><img src="/img/mfast-boost-version.webp" alt="Boost 版本验证输出（1_82）"></p><p>输出类似 <code>#define BOOST_LIB_VERSION &quot;1_82&quot;</code> 即安装成功。</p><h2 id="6-下载-mFAST-源码"><a href="#6-下载-mFAST-源码" class="headerlink" title="6. 下载 mFAST 源码"></a>6. 下载 mFAST 源码</h2><h3 id="6-1-获取源码"><a href="#6-1-获取源码" class="headerlink" title="6.1 获取源码"></a>6.1 获取源码</h3><p>建议将第三方源码统一放在 <code>/root/src</code>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">mkdir</span> -p /root/src</span><br><span class="line"><span class="built_in">cd</span> /root/src</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://github.com/objectcomputing/mFAST.git</span><br><span class="line"><span class="built_in">cd</span> ./mFAST</span><br></pre></td></tr></table></figure><p><img src="/img/mfast-git-clone.webp" alt="git clone mFAST 仓库"></p><blockquote><p>国内直连 GitHub 较慢或 clone 失败时，可参考 <a href="/2026/09/20/github-slow-access-fix/">GitHub 访问慢／下载超时：3 种简单解决方法</a> 中的加速方法。</p></blockquote><h3 id="6-2-拉取子模块（tinyxml2）"><a href="#6-2-拉取子模块（tinyxml2）" class="headerlink" title="6.2 拉取子模块（tinyxml2）"></a>6.2 拉取子模块（tinyxml2）</h3><p>mFAST 通过 git submodule 依赖 <strong>tinyxml2</strong>（XML 解析库），需要显式初始化拉取：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git submodule update --init --recursive</span><br></pre></td></tr></table></figure><p>执行完成后检查子模块目录：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">ls</span> tinyxml2</span><br></pre></td></tr></table></figure><p><img src="/img/mfast-tinyxml2.webp" alt="tinyxml2 子模块目录"></p><h2 id="7-编译并安装-mFAST"><a href="#7-编译并安装-mFAST" class="headerlink" title="7. 编译并安装 mFAST"></a>7. 编译并安装 mFAST</h2><h3 id="7-1-创建-build-目录"><a href="#7-1-创建-build-目录" class="headerlink" title="7.1 创建 build 目录"></a>7.1 创建 build 目录</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">mkdir</span> -p build</span><br><span class="line"><span class="built_in">cd</span> build</span><br></pre></td></tr></table></figure><p>所有编译生成的文件都放在 <code>build</code> 目录里，方便统一清理。</p><h3 id="7-2-配置-CMake"><a href="#7-2-配置-CMake" class="headerlink" title="7.2 配置 CMake"></a>7.2 配置 CMake</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">cmake .. \</span><br><span class="line">    -DCMAKE_BUILD_TYPE=Release \</span><br><span class="line">    -DCMAKE_C_COMPILER=gcc \</span><br><span class="line">    -DCMAKE_CXX_COMPILER=g++ \</span><br><span class="line">    -DBOOST_ROOT=/opt/boost \</span><br><span class="line">    -DBoost_NO_SYSTEM_PATHS=ON \</span><br><span class="line">    -DCMAKE_INSTALL_PREFIX=/opt/mfast</span><br></pre></td></tr></table></figure><p>参数说明：</p><ul><li><code>-DCMAKE_BUILD_TYPE=Release</code>：Release 编译优化</li><li><code>-DCMAKE_C_COMPILER</code> &#x2F; <code>-DCMAKE_CXX_COMPILER</code>：指定使用当前环境（devtoolset-8）的 gcc &#x2F; g++</li><li><code>-DBOOST_ROOT=/opt/boost</code>：指定 Boost 安装路径</li><li><code>-DBoost_NO_SYSTEM_PATHS=ON</code>：仅使用 BOOST_ROOT，不搜索系统默认路径</li><li><code>-DCMAKE_INSTALL_PREFIX=/opt/mfast</code>：mFAST 安装目录</li></ul><h3 id="7-3-编译"><a href="#7-3-编译" class="headerlink" title="7.3 编译"></a>7.3 编译</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">make -j4</span><br></pre></td></tr></table></figure><p><img src="/img/mfast-make.webp" alt="mFAST 编译过程"></p><h3 id="7-4-安装"><a href="#7-4-安装" class="headerlink" title="7.4 安装"></a>7.4 安装</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">make install</span><br></pre></td></tr></table></figure><p><img src="/img/mfast-make-install.webp" alt="mFAST 安装过程"></p><h2 id="8-验证编译结果"><a href="#8-验证编译结果" class="headerlink" title="8. 验证编译结果"></a>8. 验证编译结果</h2><p>编译安装完成后，<code>/opt</code> 下的目录结构如下：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">/opt</span><br><span class="line">│</span><br><span class="line">├── cmake</span><br><span class="line">│   └── CMake 3.31</span><br><span class="line">│</span><br><span class="line">├── boost</span><br><span class="line">│   └── Boost 1.82</span><br><span class="line">│</span><br><span class="line">└── mfast</span><br><span class="line">    └── mFAST</span><br></pre></td></tr></table></figure><h2 id="9-常见问题排查"><a href="#9-常见问题排查" class="headerlink" title="9. 常见问题排查"></a>9. 常见问题排查</h2><p><strong>1. cmake 配置时提示 CMake 版本过低</strong></p><p>确认使用的是新版 cmake：<code>which cmake</code> 应指向 <code>/opt/cmake/bin/cmake</code>，<code>cmake --version</code> 显示 3.31.8。若仍是旧版，检查是否已执行 <code>export PATH</code> 或 <code>source /etc/profile.d/cmake.sh</code>。</p><p><strong>2. 找不到 Boost 头文件 &#x2F; 库</strong></p><ul><li>确认 Boost 已安装到 <code>/opt/boost</code>（检查 <code>/opt/boost/include/boost/version.hpp</code>）</li><li>确认 CMake 参数 <code>-DBOOST_ROOT=/opt/boost</code> 与 <code>-DBoost_NO_SYSTEM_PATHS=ON</code> 已生效</li><li>若提示 Boost 版本不匹配，可重新编译对应版本</li></ul><p><strong>3. 编译报错 gcc 版本过低 &#x2F; 不支持 C++14</strong></p><p>确保已执行 <code>scl enable devtoolset-8 bash</code> 激活，且 <code>make</code> 时仍处于同一激活会话中。</p><p><strong>4. git clone 或 submodule 拉取失败</strong></p><p>下载源码需要访问 GitHub，若网络不稳定可重试，或参考 <a href="/2026/09/20/github-slow-access-fix/">GitHub 访问慢／下载超时：3 种简单解决方法</a> 配置加速后重新执行 <code>git submodule update --init --recursive</code>。</p>]]>
    </content>
    <id>https://www.gululu.top/2026/09/24/centos79-mfast-source-build/</id>
    <link href="https://www.gululu.top/2026/09/24/centos79-mfast-source-build/"/>
    <published>2026-09-24T02:00:00.000Z</published>
    <summary>本文以 CentOS 7.9 为例源码编译安装 mFAST 库，用于解析交易所行情数据：激活 devtoolset-8、安装 CMake、编译 Boost 1.82 并构建 mFAST，附 STEP / FAST 协议背景与常见问题排查。</summary>
    <title>CentOS 7.9 源码编译安装 mFAST 库（解析 STEP 协议）</title>
    <updated>2026-09-24T02:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>GuLu-ch</name>
    </author>
    <category term="技术笔记" scheme="https://www.gululu.top/categories/%E6%8A%80%E6%9C%AF%E7%AC%94%E8%AE%B0/"/>
    <category term="CentOS" scheme="https://www.gululu.top/tags/CentOS/"/>
    <category term="devtoolset" scheme="https://www.gululu.top/tags/devtoolset/"/>
    <category term="C++" scheme="https://www.gululu.top/tags/C/"/>
    <category term="编译环境" scheme="https://www.gululu.top/tags/%E7%BC%96%E8%AF%91%E7%8E%AF%E5%A2%83/"/>
    <content>
      <![CDATA[<p>本文以 CentOS 7.9 服务器（x86_64）为例，介绍 C++ 编译环境的完整搭建过程：先更换 yum 镜像源，再通过 SCL 安装高版本 GCC（devtoolset-8，gcc 8.3.1），最后安装 ExaNIC &#x2F; ef_vi &#x2F; libpcap 等网卡高性能开发包。搭建完成后，即可编译依赖 C++14 &#x2F; C++17 特性或网卡低延迟接口的项目。</p><p><img src="/img/centos79.webp" alt="CentOS 7.9 开发环境"></p><p><strong>为什么需要 devtoolset-8：</strong> CentOS 7.9 系统自带的 gcc 为 4.8.5，仅完整支持 C++11（大部分 C++14 &#x2F; C++17 特性不支持），无法编译依赖新标准的项目。<strong>SCL（Software Collections，软件集合）</strong> 允许在系统中并行安装新版工具链而不影响系统默认环境；devtoolset-8 提供 gcc 8.3.1（完整支持 C++14 及大部分 C++17），通过 <code>scl enable</code> 按需激活使用。</p><p><strong>适用场景：</strong></p><ul><li>项目依赖 C++14 &#x2F; C++17 特性，系统自带 gcc 4.8.5 编译报错</li><li>需要 ExaNIC &#x2F; ef_vi &#x2F; libpcap 等网卡高性能开发库（低延迟收发、抓包）</li><li>需要 automake &#x2F; autoconf &#x2F; libtool 等 Autotools 工具链构建源码包</li></ul><p><strong>前置条件：</strong></p><ul><li>CentOS 7.9 服务器（x86_64 架构，以下命令需 root 权限或 sudo）</li><li>服务器可访问外网（需要下载软件包）</li><li>已备好网卡源码包：<ul><li>ExaNIC：<code>exanic-2.4.1.tar.gz</code>，下载地址 <a href="https://github.com/cisco/exanic-software/archive/refs/tags/v2.4.1.tar.gz">https://github.com/cisco/exanic-software/archive/refs/tags/v2.4.1.tar.gz</a></li><li>OpenOnload：克隆 <a href="https://github.com/rigtorp/openonload">https://github.com/rigtorp/openonload</a> 仓库（见 5.2 节）</li></ul></li></ul><p><strong>整体流程：</strong> 更新 yum 源 → 安装 SCL → 替换 SCL 源 → 安装 devtoolset-8 → 安装网卡&#x2F;项目开发包</p><h2 id="1-更新-yum-源"><a href="#1-更新-yum-源" class="headerlink" title="1. 更新 yum 源"></a>1. 更新 yum 源</h2><p>CentOS 7 官方源已停止维护（EOL），且国内访问较慢，建议替换为国内镜像源。实测推荐<strong>中科大（USTC）</strong> 或<strong>腾讯云</strong>的镜像。</p><p><strong>方式一：手动替换源。</strong> 以中科大为例如下（各镜像站帮助页均提供对应的一键替换命令）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份官方源，便于回退</span></span><br><span class="line"><span class="built_in">mv</span> /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 下载中科大 CentOS 7 源</span></span><br><span class="line">wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.ustc.edu.cn/repo/centos/7/CentOS-Base.repo</span><br><span class="line"></span><br><span class="line"><span class="comment"># 清理缓存并重建</span></span><br><span class="line">yum clean all</span><br><span class="line">yum makecache</span><br></pre></td></tr></table></figure><p><strong>方式二：一键脚本换源（推荐）。</strong> 如果不想手动编辑 repo 文件，推荐使用社区维护的 <strong>linuxmirrors</strong> 一键换源脚本。执行后按提示交互式选择镜像站（阿里云 &#x2F; 腾讯云 &#x2F; 中科大 &#x2F; 网易等），脚本会自动完成源备份、替换与缓存刷新，操作更省心、不易出错：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># linuxmirrors 一键换源脚本（交互式选择镜像源）</span></span><br><span class="line">bash &lt;(curl -sSL https://linuxmirrors.cn/main.sh)</span><br></pre></td></tr></table></figure><p>执行后按提示操作即可：选择镜像站时建议选阿里云或腾讯云，其余选项（是否备份原源、是否更新软件包等）按默认回车即可。脚本完成后会自动执行 <code>yum clean all</code> &#x2F; <code>yum makecache</code>。若因网络原因脚本下载失败，可先执行 <code>curl -fsSL https://linuxmirrors.cn/main.sh -o main.sh</code> 下载，再运行 <code>bash main.sh</code>。</p><h2 id="2-安装-SCL"><a href="#2-安装-SCL" class="headerlink" title="2. 安装 SCL"></a>2. 安装 SCL</h2><p>SCL 仓库包（<code>centos-release-scl</code>）提供 devtoolset 等软件集合，安装命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum -y install centos-release-scl</span><br></pre></td></tr></table></figure><p>安装完成后会生成两个仓库配置文件：</p><ul><li><code>/etc/yum.repos.d/CentOS-SCLo-scl.repo</code></li><li><code>/etc/yum.repos.d/CentOS-SCLo-scl-rh.repo</code></li></ul><h2 id="3-替换-SCL-源"><a href="#3-替换-SCL-源" class="headerlink" title="3. 替换 SCL 源"></a>3. 替换 SCL 源</h2><p>上一步安装的 SCL 仓库默认指向 CentOS 官方地址，目前官方 SCL 仓库已停止维护，<strong>如果不替换源，后续执行 <code>yum install devtoolset-8-*</code> 会提示找不到软件包</strong>。需要将两个 repo 文件中的 <code>baseurl</code> 改为国内镜像（以阿里云为例）。</p><h3 id="3-1-修改-CentOS-SCLo-scl-repo"><a href="#3-1-修改-CentOS-SCLo-scl-repo" class="headerlink" title="3.1 修改 CentOS-SCLo-scl.repo"></a>3.1 修改 CentOS-SCLo-scl.repo</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vi /etc/yum.repos.d/CentOS-SCLo-scl.repo</span><br></pre></td></tr></table></figure><p>将 <code>[centos-sclo-sclo]</code> 段落内容替换为：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[centos-sclo-sclo]</span></span><br><span class="line"><span class="attr">name</span>=CentOS-<span class="number">7</span> - SCLo sclo</span><br><span class="line"><span class="attr">baseurl</span>=https://mirrors.aliyun.com/centos/<span class="number">7</span>/sclo/x<span class="number">86_64</span>/sclo/</span><br><span class="line"><span class="comment"># mirrorlist=http://mirrorlist.centos.org?arch=$basearch&amp;release=7&amp;repo=sclo-sclo</span></span><br><span class="line"><span class="attr">gpgcheck</span>=<span class="number">0</span></span><br><span class="line"><span class="attr">enabled</span>=<span class="number">1</span></span><br><span class="line"><span class="attr">gpgkey</span>=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo</span><br></pre></td></tr></table></figure><h3 id="3-2-修改-CentOS-SCLo-scl-rh-repo"><a href="#3-2-修改-CentOS-SCLo-scl-rh-repo" class="headerlink" title="3.2 修改 CentOS-SCLo-scl-rh.repo"></a>3.2 修改 CentOS-SCLo-scl-rh.repo</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vi /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo</span><br></pre></td></tr></table></figure><p>将 <code>[centos-sclo-rh]</code> 段落内容替换为：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[centos-sclo-rh]</span></span><br><span class="line"><span class="attr">name</span>=CentOS-<span class="number">7</span> - SCLo rh</span><br><span class="line"><span class="attr">baseurl</span>=https://mirrors.aliyun.com/centos/<span class="number">7</span>/sclo/x<span class="number">86_64</span>/rh/</span><br><span class="line"><span class="comment"># mirrorlist=http://mirrorlist.centos.org?arch=$basearch&amp;release=7&amp;repo=sclo-rh</span></span><br><span class="line"><span class="attr">gpgcheck</span>=<span class="number">0</span></span><br><span class="line"><span class="attr">enabled</span>=<span class="number">1</span></span><br><span class="line"><span class="attr">gpgkey</span>=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo</span><br></pre></td></tr></table></figure><p><strong>关键点：</strong> <code>baseurl</code> 必须指向可用镜像；<code>gpgcheck=0</code> 跳过 GPG 校验（镜像仓库一般可用）；<code>enabled=1</code> 保持仓库启用。</p><h3 id="3-3-刷新缓存"><a href="#3-3-刷新缓存" class="headerlink" title="3.3 刷新缓存"></a>3.3 刷新缓存</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">yum repolist</span><br><span class="line">yum clean all</span><br><span class="line">yum makecache</span><br></pre></td></tr></table></figure><p>刷新后可执行 <code>yum list available devtoolset-8*</code>，确认能搜索到 devtoolset-8 相关软件包。</p><h2 id="4-安装-devtoolset-8-环境"><a href="#4-安装-devtoolset-8-环境" class="headerlink" title="4. 安装 devtoolset-8 环境"></a>4. 安装 devtoolset-8 环境</h2><h3 id="4-1-安装编译工具链"><a href="#4-1-安装编译工具链" class="headerlink" title="4.1 安装编译工具链"></a>4.1 安装编译工具链</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">yum -y install devtoolset-8-binutils</span><br><span class="line">yum -y install devtoolset-8-gcc</span><br><span class="line">yum -y install devtoolset-8-gcc-c++</span><br></pre></td></tr></table></figure><ul><li><code>devtoolset-8-gcc</code>：gcc 8.3.1 编译器（C 语言）</li><li><code>devtoolset-8-gcc-c++</code>：g++ 8.3.1 编译器（C++ 语言，支持 C++14 &#x2F; C++17）</li><li><code>devtoolset-8-binutils</code>：汇编器、链接器等二进制工具</li></ul><h3 id="4-2-激活环境"><a href="#4-2-激活环境" class="headerlink" title="4.2 激活环境"></a>4.2 激活环境</h3><p>devtoolset 安装后<strong>不会自动生效</strong>，需要激活后才可使用新版本 gcc：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">scl <span class="built_in">enable</span> devtoolset-8 bash</span><br></pre></td></tr></table></figure><blockquote><p>说明：<code>scl enable</code> 仅对<strong>当前终端会话</strong>生效，退出终端后失效。若希望默认启用，可将该命令追加到 <code>~/.bashrc</code>，或写入 <code>/etc/profile.d/devtoolset-8.sh</code>。</p></blockquote><h3 id="4-3-验证安装"><a href="#4-3-验证安装" class="headerlink" title="4.3 验证安装"></a>4.3 验证安装</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">gcc -v</span><br></pre></td></tr></table></figure><p>确认输出为：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC)</span><br></pre></td></tr></table></figure><p>同时可用 <code>which gcc</code> 确认编译器路径为 <code>/opt/rh/devtoolset-8/root/usr/bin/gcc</code>。</p><h2 id="5-安装网卡与项目开发包"><a href="#5-安装网卡与项目开发包" class="headerlink" title="5. 安装网卡与项目开发包"></a>5. 安装网卡与项目开发包</h2><p>以下为本项目编译所需的网卡高性能库与其他依赖，按需安装。</p><h3 id="5-1-ExaNIC-Exablaze-网卡软件包"><a href="#5-1-ExaNIC-Exablaze-网卡软件包" class="headerlink" title="5.1 ExaNIC &#x2F; Exablaze 网卡软件包"></a>5.1 ExaNIC &#x2F; Exablaze 网卡软件包</h3><p>源码包可从 GitHub 下载（tag v2.4.1，解压后目录为 <code>exanic-software-2.4.1</code>）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载源码包（国内直连 GitHub 慢时，可参考《GitHub 访问慢/下载超时》中的加速方法）</span></span><br><span class="line">wget -O exanic-2.4.1.tar.gz https://github.com/cisco/exanic-software/archive/refs/tags/v2.4.1.tar.gz</span><br><span class="line"></span><br><span class="line">tar -xf exanic-2.4.1.tar.gz</span><br><span class="line"><span class="built_in">cd</span> exanic-software-2.4.1</span><br><span class="line">make</span><br><span class="line">make install</span><br></pre></td></tr></table></figure><p>编译安装 ExaNIC 网卡驱动与用户态库（提供 <code>exanic</code> 接口，用于 ExaNIC 系列网卡的低延迟收发）。</p><h3 id="5-2-ef-vi（OpenOnload）"><a href="#5-2-ef-vi（OpenOnload）" class="headerlink" title="5.2 ef_vi（OpenOnload）"></a>5.2 ef_vi（OpenOnload）</h3><p>OpenOnload 是 Solarflare 的高性能用户态网络栈，安装后提供 <strong>ef_vi</strong> 接口，可与 pcap 结合用于高性能抓包。仓库地址：<a href="https://github.com/rigtorp/openonload">https://github.com/rigtorp/openonload</a>。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 克隆仓库（直接得到 openonload-201811-u1 目录）</span></span><br><span class="line">git <span class="built_in">clone</span> https://github.com/rigtorp/openonload.git openonload-201811-u1</span><br><span class="line"><span class="built_in">cd</span> openonload-201811-u1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果脚本或部署流程必须要求原名 .tgz 包，可以直接打包出来：</span></span><br><span class="line"><span class="built_in">cd</span> ..</span><br><span class="line">tar -czvf openonload-201811-u1.tgz openonload-201811-u1</span><br><span class="line"><span class="built_in">cd</span> openonload-201811-u1</span><br><span class="line"></span><br><span class="line"><span class="built_in">chmod</span> +x scripts/onload_install</span><br><span class="line">./scripts/onload_install</span><br></pre></td></tr></table></figure><h3 id="5-3-libpcap"><a href="#5-3-libpcap" class="headerlink" title="5.3 libpcap"></a>5.3 libpcap</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">yum -y install libpcap</span><br><span class="line">yum -y install libpcap-devel</span><br></pre></td></tr></table></figure><p><code>libpcap</code> 为抓包库，<code>libpcap-devel</code> 提供头文件与链接库（编译引用 pcap 的程序时需要）。</p><h3 id="5-4-tinyxml"><a href="#5-4-tinyxml" class="headerlink" title="5.4 tinyxml"></a>5.4 tinyxml</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">yum -y install tinyxml</span><br><span class="line">yum -y install tinyxml-devel</span><br></pre></td></tr></table></figure><p><code>tinyxml</code> 为 C++ 轻量级 XML 解析库，<code>tinyxml-devel</code> 提供头文件与链接库，供项目解析 XML 配置或数据文件。</p><h3 id="5-5-tcmalloc（gperftools）"><a href="#5-5-tcmalloc（gperftools）" class="headerlink" title="5.5 tcmalloc（gperftools）"></a>5.5 tcmalloc（gperftools）</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum install -y gperftools-devel</span><br></pre></td></tr></table></figure><p><code>gperftools-devel</code> 提供 Google 性能工具集，核心是 <strong>tcmalloc</strong> 内存分配器——在多线程高并发场景下比系统默认分配器（glibc malloc）开销更低、性能更好；同时附带 CPU &#x2F; 堆分析器（<code>pprof</code>）等调优工具。若项目仅需 tcmalloc 或性能分析，安装本包即可。</p><h3 id="5-6-GNU-Autotools-工具链"><a href="#5-6-GNU-Autotools-工具链" class="headerlink" title="5.6 GNU Autotools 工具链"></a>5.6 GNU Autotools 工具链</h3><p>如果编译时提示缺少 <code>aclocal-1.13</code>，说明 automake 版本过旧或未安装，执行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum install -y automake autoconf libtool m4 perl</span><br></pre></td></tr></table></figure><ul><li><code>automake</code>：提供 <code>aclocal</code>（生成 aclocal.m4）</li><li><code>autoconf</code>：生成 configure 脚本</li><li><code>libtool</code>：处理动态库的编译链接</li><li><code>m4</code>：宏处理器，autoconf 的依赖</li><li><code>perl</code>：部分构建脚本依赖</li></ul><h2 id="6-常见问题排查"><a href="#6-常见问题排查" class="headerlink" title="6. 常见问题排查"></a>6. 常见问题排查</h2><p><strong>1. 安装 devtoolset-8 提示找不到软件包</strong></p><ul><li>确认第 3 步已替换 SCL 源并执行 <code>yum makecache</code></li><li>执行 <code>yum list available devtoolset-8*</code> 验证仓库中是否存在软件包</li></ul><p><strong>2. 关闭终端后 gcc 又变回 4.8.5</strong></p><p><code>scl enable</code> 只对当前会话生效，需要永久生效时把命令写入 <code>~/.bashrc</code>。</p><p><strong>3. gcc -v 显示仍是 4.8.5</strong></p><ul><li>确认已在同一次会话中执行过 <code>scl enable devtoolset-8 bash</code></li><li>用 <code>which gcc</code> 检查路径是否指向 <code>/opt/rh/devtoolset-8/root/usr/bin/gcc</code></li></ul><p><strong>4. 编译报错缺少 aclocal-1.13</strong></p><p>安装 automake 等 Autotools 工具链（见 5.6 节），并确认 PATH 中包含对应版本。</p><p><strong>5. 缺少 build 目录</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum install kernel-devel-$(<span class="built_in">uname</span> -r)</span><br></pre></td></tr></table></figure>]]>
    </content>
    <id>https://www.gululu.top/2026/09/23/centos79-cpp-env-devtoolset8/</id>
    <link href="https://www.gululu.top/2026/09/23/centos79-cpp-env-devtoolset8/"/>
    <published>2026-09-23T02:00:00.000Z</published>
    <summary>本文记录 CentOS 7.9 下 C++ 编译环境的完整搭建过程：更换 yum 镜像源、通过 SCL 安装 devtoolset-8（GCC 8.3.1），并部署 ExaNIC、ef_vi、libpcap 等网卡开发包，附常见问题排查。</summary>
    <title>CentOS 7.9 C++ 编译环境搭建（devtoolset-8）</title>
    <updated>2026-09-23T02:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>GuLu-ch</name>
    </author>
    <category term="技术笔记" scheme="https://www.gululu.top/categories/%E6%8A%80%E6%9C%AF%E7%AC%94%E8%AE%B0/"/>
    <category term="GitHub" scheme="https://www.gululu.top/tags/GitHub/"/>
    <category term="网络" scheme="https://www.gululu.top/tags/%E7%BD%91%E7%BB%9C/"/>
    <category term="效率工具" scheme="https://www.gululu.top/tags/%E6%95%88%E7%8E%87%E5%B7%A5%E5%85%B7/"/>
    <content>
      <![CDATA[<p>GitHub 服务器位于海外，受 DNS 污染、国际线路拥堵等因素影响，国内访问经常遇到以下问题：</p><ul><li>网页打开缓慢、频繁超时</li><li><code>git clone</code> 速度极慢或直接失败</li><li>Release 大文件下载中断</li></ul><p>下面整理了 3 种实测有效的解决方法，按推荐程度排序。</p><p><img src="/img/github-cover.webp" alt="GitHub 访问加速"></p><h2 id="方法一：URL-前缀代理"><a href="#方法一：URL-前缀代理" class="headerlink" title="方法一：URL 前缀代理"></a>方法一：URL 前缀代理</h2><p><strong>原理</strong>：在原始 GitHub 地址前拼接一个加速域名，请求先经国内加速节点转发。</p><table><thead><tr><th>#</th><th>站点</th><th>类型</th><th>支持范围</th><th>速度</th><th>上手难度</th></tr></thead><tbody><tr><td>1</td><td>gh-proxy.com</td><td>URL 前缀代理</td><td>clone + Release + raw + archive</td><td>★★★★</td><td>★</td></tr><tr><td>2</td><td>ghfast.top</td><td>URL 前缀代理</td><td>clone + Release + raw</td><td>★★★★</td><td>★</td></tr><tr><td>3</td><td>mirror.ghproxy.com</td><td>URL 前缀代理</td><td>clone + Release + raw</td><td>★★★</td><td>★</td></tr><tr><td>4</td><td>hub.gitmirror.com</td><td>URL 前缀代理</td><td>clone + Release</td><td>★★★</td><td>★</td></tr></tbody></table><blockquote><p><strong>安全提示</strong>：以上均为第三方加速服务，请求会经过对方服务器。请仅用于公开仓库，不要用它克隆私有仓库，也不要在使用期间执行需要凭据的 <code>git push</code>。</p></blockquote><h3 id="gh-proxy-com"><a href="#gh-proxy-com" class="headerlink" title="gh-proxy.com"></a>gh-proxy.com</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 单文件下载</span></span><br><span class="line">wget https://gh-proxy.com/https://github.com/owner/repo/releases/download/v1.0/file.tar.gz</span><br><span class="line"></span><br><span class="line"><span class="comment"># 克隆仓库</span></span><br><span class="line">git <span class="built_in">clone</span> https://gh-proxy.com/https://github.com/owner/repo.git</span><br><span class="line"></span><br><span class="line"><span class="comment"># raw 文件</span></span><br><span class="line">wget https://gh-proxy.com/https://raw.githubusercontent.com/owner/repo/main/README.md</span><br></pre></td></tr></table></figure><p>支持 Release、raw、archive、git clone 全场景。实测速度 10~50 MB&#x2F;s（移动 &#x2F; 联通 &#x2F; 电信均测过，移动最快）。</p><h3 id="ghfast-top"><a href="#ghfast-top" class="headerlink" title="ghfast.top"></a>ghfast.top</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget https://ghfast.top/https://github.com/neovim/neovim/releases/download/stable/nvim-linux-x86_64.tar.gz</span><br></pre></td></tr></table></figure><p>备用域名集合站：<a href="https://ghproxy.link/">https://ghproxy.link/</a>，主域名失效时可自动切换可用镜像。</p><h3 id="mirror-ghproxy-com"><a href="#mirror-ghproxy-com" class="headerlink" title="mirror.ghproxy.com"></a>mirror.ghproxy.com</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://mirror.ghproxy.com/https://github.com/InternLM/InternLM.git</span><br></pre></td></tr></table></figure><p>功能与 gh-proxy.com 基本一致，稳定性偶尔波动。</p><h3 id="hub-gitmirror-com"><a href="#hub-gitmirror-com" class="headerlink" title="hub.gitmirror.com"></a>hub.gitmirror.com</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://hub.gitmirror.com/https://github.com/owner/repo.git</span><br></pre></td></tr></table></figure><p>适合国内服务器拉取镜像。</p><h3 id="全局配置-url-insteadOf（一次配置，永久生效）"><a href="#全局配置-url-insteadOf（一次配置，永久生效）" class="headerlink" title="全局配置 url.insteadOf（一次配置，永久生效）"></a>全局配置 url.insteadOf（一次配置，永久生效）</h3><p>每次手动加前缀比较麻烦，可以用 Git 的 <code>insteadOf</code> 自动把 GitHub 地址重写为镜像地址。<strong>以下方案任选其一即可，不要同时配置</strong>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 方案 A：gh-proxy.com</span></span><br><span class="line">git config --global url.<span class="string">&quot;https://gh-proxy.com/https://github.com/&quot;</span>.insteadOf <span class="string">&quot;https://github.com/&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 方案 B：hub.gitmirror.com</span></span><br><span class="line">git config --global url.<span class="string">&quot;https://hub.gitmirror.com/https://github.com/&quot;</span>.insteadOf <span class="string">&quot;https://github.com/&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 方案 C：gitclone.com（仅支持 clone）</span></span><br><span class="line">git config --global url.<span class="string">&quot;https://gitclone.com/github.com/&quot;</span>.insteadOf <span class="string">&quot;https://github.com/&quot;</span></span><br></pre></td></tr></table></figure><p>这样只匹配 <code>https://github.com/</code> 开头的地址，<strong>不会影响 GitLab、Gitee 等其他站点</strong>。</p><p>如果只想在特定目录生效，可以用 <code>includeIf</code> 按目录隔离：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># ~/.gitconfig</span></span><br><span class="line"><span class="section">[includeIf &quot;gitdir:~/work/&quot;]</span></span><br><span class="line">  <span class="attr">path</span> = ~/.gitconfig-work</span><br><span class="line"></span><br><span class="line"><span class="comment"># ~/.gitconfig-work</span></span><br><span class="line"><span class="section">[url &quot;https://hub.gitmirror.com/https://github.com/&quot;]</span></span><br><span class="line">  <span class="attr">insteadOf</span> = https://github.com/</span><br></pre></td></tr></table></figure><blockquote><p><strong>注意</strong>：早期教程常用 <code>insteadOf &quot;https://&quot;</code>，它会接管所有 HTTPS 地址，可能影响非 GitHub 仓库并向第三方泄露凭据，不建议使用。</p></blockquote><h3 id="gitclone-com（仅-clone-场景）"><a href="#gitclone-com（仅-clone-场景）" class="headerlink" title="gitclone.com（仅 clone 场景）"></a>gitclone.com（仅 clone 场景）</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://gitclone.com/github.com/owner/repo.git</span><br></pre></td></tr></table></figure><p>注意路径格式是 <code>gitclone.com/github.com/</code>，而不是 <code>gitclone.com/https://github.com/</code>。</p><h2 id="方法二：修改-hosts（DNS-指定）"><a href="#方法二：修改-hosts（DNS-指定）" class="headerlink" title="方法二：修改 hosts（DNS 指定）"></a>方法二：修改 hosts（DNS 指定）</h2><p><strong>原理</strong>：把 <code>github.com</code>、<code>raw.githubusercontent.com</code> 等域名直接绑定到可用 IP，绕过被污染的 DNS 解析。</p><h3 id="GitHub520"><a href="#GitHub520" class="headerlink" title="GitHub520"></a>GitHub520</h3><p>macOS &#x2F; Linux 一次性更新：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> curl -o /tmp/hosts https://raw.hellogithub.com/hosts</span><br><span class="line"><span class="built_in">sudo</span> <span class="built_in">cat</span> /tmp/hosts &gt;&gt; /etc/hosts</span><br></pre></td></tr></table></figure><p>Windows 用户可用 <a href="https://github.com/oldj/SwitchHosts">SwitchHosts</a> 订阅 <a href="https://raw.hellogithub.com/hosts">https://raw.hellogithub.com/hosts</a>，实现自动更新。</p><p>注意：hosts 只对直连流量生效；如果开了全局代理，解析由代理接管，hosts 不会参与。</p><h2 id="方法三：Watt-Toolkit（原-Steam-）"><a href="#方法三：Watt-Toolkit（原-Steam-）" class="headerlink" title="方法三：Watt Toolkit（原 Steam++）"></a>方法三：Watt Toolkit（原 Steam++）</h2><p>图形化工具，开箱即用，官网：<a href="https://steampp.net/">https://steampp.net/</a>。</p><p>除 GitHub 外，还能一键加速 Steam 商店等，适合不想折腾命令行的用户。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><table><thead><tr><th>场景</th><th>推荐方案</th></tr></thead><tbody><tr><td>临时下载 &#x2F; 克隆</td><td>方法一：URL 前缀代理</td></tr><tr><td>全局生效、免手动加前缀</td><td><code>url.insteadOf</code> 配置</td></tr><tr><td>仅需 clone</td><td>gitclone.com</td></tr><tr><td>图形化操作</td><td>方法三：Watt Toolkit</td></tr><tr><td>网页 &#x2F; git &#x2F; 下载整体提速</td><td>方法二：hosts（GitHub520）</td></tr></tbody></table>]]>
    </content>
    <id>https://www.gululu.top/2026/09/20/github-slow-access-fix/</id>
    <link href="https://www.gululu.top/2026/09/20/github-slow-access-fix/"/>
    <published>2026-09-20T02:00:00.000Z</published>
    <summary>国内访问 GitHub 慢、git clone 超时、Release 下载中断怎么办？本文分享 URL 前缀代理、hosts 加速、Watt Toolkit 三种实测有效的方法，并附 url.insteadOf 全局配置与安全注意事项。</summary>
    <title>GitHub 访问慢／下载超时：3 种简单解决方法</title>
    <updated>2026-09-20T02:00:00.000Z</updated>
  </entry>
</feed>
