CentOS 7.9 源码编译安装 mFAST 库(解析 STEP 协议)
本文以 CentOS 7.9 服务器为例,介绍从源码编译安装 mFAST 库的完整过程。mFAST 是 Object Computing 公司开源的 FAST(FIX Adapted for STreaming)协议实现,用于证券交易数据的快速编码 / 解码,我的日常开发就是基于它解析交易所行情数据。整个流程包括:激活 devtoolset-8 编译环境 → 安装基础依赖 → 安装新版 CMake → 源码编译 Boost → 下载并编译 mFAST → 验证结果。
1. 背景:交易所行情协议与 mFAST
国内证券市场的行情数据由交易所通过专用协议推送,其中两条技术路线最具代表性:
- 深交所 STEP(Securities Trading Exchange Protocol):基于 FIX 5.0 SP2 的文本化协议,采用
Tag=Value编码,主要提供 Level I 行情(买卖五档盘口、成交汇总等),约 3 秒一次快照,通过 TCP 推送。 - 上交所 FAST(FIX Adapted for STreaming):在 STEP 会话层之上叠加 FAST 二进制压缩编码,主要提供 Level II 行情(十档盘口、逐笔成交、逐笔委托等),时间精度可达 10ms 级,通常通过 UDP 组播推送。
FAST 的压缩能力来自停止位编码、存在位图(PMap)以及差值(delta)、增量等字段操作符,因此解码时不能只看单条报文,还需要配套的模板文件与字典状态,这也正是需要专门的解码库的原因。mFAST 就是这类库:它支持模板驱动的高性能 FAST 编解码,我在日常工作中用它解析交易所行情数据,并在其基础上做行情转发与策略接入。
关于 STEP 与 FAST 的协议细节与对比,可参考:中国证券交易所行情协议深度解析:STEP vs FAST 的技术演进与实践。
为什么需要这些依赖:
- mFAST 使用 CMake 构建,最低要求 CMake 3.23,而 CentOS 7 自带版本过低
- mFAST 依赖 Boost 库(示例使用 1.82.0),并依赖 tinyxml2(通过 git submodule 拉取)
- 编译需要较新的 gcc / g++(使用上篇搭建的 devtoolset-8,gcc 8.3.1)
适用场景:
- 解析上交所 / 深交所等交易所的 STEP / FAST 行情与交易数据
- 需要 FAST 协议高速编解码的量化 / 交易系统开发
- 其他依赖 mFAST 库的 C++ 项目
前置条件:
- 已完成 CentOS 7.9 C++ 编译环境搭建(devtoolset-8) 中的环境配置
- 具备 root 权限,服务器可访问外网(需从 GitHub 下载源码)
- 磁盘空间充足(Boost 源码编译建议预留 5GB 以上)
整体流程: 激活编译环境 → 安装基础依赖 → 安装新版 CMake → 编译 Boost → 下载 mFAST 源码 → 编译安装 → 验证目录结构
2. 激活编译环境
进入 devtoolset-8 环境(gcc 8.3.1):
1 | scl enable devtoolset-8 bash |
然后查看当前的 gcc / g++ 版本:
1 | gcc -v |

确认输出为 gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC) 即可继续;若显示 4.8.5,说明未激活成功。
3. 安装基础编译依赖
1 | yum install -y \ |
各工具用途:
git:拉取 mFAST 源码及子模块make/autoconf/automake/libtool:编译构建工具链wget:下载 CMake、Boost 源码包tar/gzip/bzip2:解压各类源码包
4. 安装新版 CMake
mFAST 构建最低需要 CMake 3.23,而 CentOS 7 自带的 CMake 版本过低,无法满足要求,因此需要单独安装新版 CMake。示例使用官方预编译的通用二进制包 3.31.8(免编译,解压即用)。
4.1 下载并解压
1 | mkdir /root/src |
说明:统一放在 /root/src 下载,解压后移动到 /opt/cmake,后续通过 PATH 引用。
4.2 配置环境变量(临时)
1 | export PATH=/opt/cmake/bin:$PATH |
4.3 永久生效(推荐)
1 | cat >/etc/profile.d/cmake.sh <<'EOF' |
1 | source /etc/profile.d/cmake.sh |
以后重新登录也会优先使用 /opt/cmake/bin/cmake。可用 cmake --version 验证版本。
5. 从源码安装 Boost
mFAST 依赖 Boost 库,这里使用 1.82.0 源码编译,并安装到指定目录 /opt/boost,避免污染系统默认路径。
5.1 下载并解压
1 | cd /root/src |
确认解压结果:
1 | ls |
应该可以看到:
1 | boost |
5.2 初始化构建系统
1 | ./bootstrap.sh \ |
成功后应该生成 b2、bjam 两个构建工具:
1 | ./b2 |
5.3 编译并安装
1 | ./b2 \ |
-j$(nproc):并行编译,使用全部 CPU 核心toolset=gcc:使用 gcc 编译器variant=release:编译 release 版本link=shared/runtime-link=shared:生成并链接动态库threading=multi:开启多线程支持
因为前面已通过 --prefix 设置安装目录,所以最终会安装到 /opt/boost。
5.4 验证安装
1 | grep BOOST_LIB_VERSION /opt/boost/include/boost/version.hpp |

输出类似 #define BOOST_LIB_VERSION "1_82" 即安装成功。
6. 下载 mFAST 源码
6.1 获取源码
建议将第三方源码统一放在 /root/src:
1 | mkdir -p /root/src |
1 | git clone https://github.com/objectcomputing/mFAST.git |

国内直连 GitHub 较慢或 clone 失败时,可参考 GitHub 访问慢/下载超时:3 种简单解决方法 中的加速方法。
6.2 拉取子模块(tinyxml2)
mFAST 通过 git submodule 依赖 tinyxml2(XML 解析库),需要显式初始化拉取:
1 | git submodule update --init --recursive |
执行完成后检查子模块目录:
1 | ls tinyxml2 |

7. 编译并安装 mFAST
7.1 创建 build 目录
1 | mkdir -p build |
所有编译生成的文件都放在 build 目录里,方便统一清理。
7.2 配置 CMake
1 | cmake .. \ |
参数说明:
-DCMAKE_BUILD_TYPE=Release:Release 编译优化-DCMAKE_C_COMPILER/-DCMAKE_CXX_COMPILER:指定使用当前环境(devtoolset-8)的 gcc / g++-DBOOST_ROOT=/opt/boost:指定 Boost 安装路径-DBoost_NO_SYSTEM_PATHS=ON:仅使用 BOOST_ROOT,不搜索系统默认路径-DCMAKE_INSTALL_PREFIX=/opt/mfast:mFAST 安装目录
7.3 编译
1 | make -j4 |

7.4 安装
1 | make install |

8. 验证编译结果
编译安装完成后,/opt 下的目录结构如下:
1 | /opt |
9. 常见问题排查
1. cmake 配置时提示 CMake 版本过低
确认使用的是新版 cmake:which cmake 应指向 /opt/cmake/bin/cmake,cmake --version 显示 3.31.8。若仍是旧版,检查是否已执行 export PATH 或 source /etc/profile.d/cmake.sh。
2. 找不到 Boost 头文件 / 库
- 确认 Boost 已安装到
/opt/boost(检查/opt/boost/include/boost/version.hpp) - 确认 CMake 参数
-DBOOST_ROOT=/opt/boost与-DBoost_NO_SYSTEM_PATHS=ON已生效 - 若提示 Boost 版本不匹配,可重新编译对应版本
3. 编译报错 gcc 版本过低 / 不支持 C++14
确保已执行 scl enable devtoolset-8 bash 激活,且 make 时仍处于同一激活会话中。
4. git clone 或 submodule 拉取失败
下载源码需要访问 GitHub,若网络不稳定可重试,或参考 GitHub 访问慢/下载超时:3 种简单解决方法 配置加速后重新执行 git submodule update --init --recursive。


