本文以 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++ 项目

前置条件:

整体流程: 激活编译环境 → 安装基础依赖 → 安装新版 CMake → 编译 Boost → 下载 mFAST 源码 → 编译安装 → 验证目录结构

2. 激活编译环境

进入 devtoolset-8 环境(gcc 8.3.1):

1
scl enable devtoolset-8 bash

然后查看当前的 gcc / g++ 版本:

1
2
gcc -v
g++ -v

gcc / g++ 版本输出(8.3.1)

确认输出为 gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC) 即可继续;若显示 4.8.5,说明未激活成功。

3. 安装基础编译依赖

1
2
3
4
5
6
7
8
9
10
yum install -y \
git \
make \
autoconf \
automake \
libtool \
wget \
tar \
gzip \
bzip2

各工具用途:

  • 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
2
3
4
5
6
7
8
9
mkdir /root/src

cd /root/src

wget https://github.com/Kitware/CMake/releases/download/v3.31.8/cmake-3.31.8-linux-x86_64.tar.gz

tar -zxvf cmake-3.31.8-linux-x86_64.tar.gz

mv cmake-3.31.8-linux-x86_64 /opt/cmake

说明:统一放在 /root/src 下载,解压后移动到 /opt/cmake,后续通过 PATH 引用。

4.2 配置环境变量(临时)

1
export PATH=/opt/cmake/bin:$PATH

4.3 永久生效(推荐)

1
2
3
cat >/etc/profile.d/cmake.sh <<'EOF'
export PATH=/opt/cmake/bin:$PATH
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
2
3
4
5
6
7
cd /root/src

wget https://archives.boost.io/release/1.82.0/source/boost_1_82_0.tar.gz

tar -zxf boost_1_82_0.tar.gz

cd boost_1_82_0

确认解压结果:

1
ls

应该可以看到:

1
2
3
4
boost
libs
tools
bootstrap.sh

5.2 初始化构建系统

1
2
./bootstrap.sh \
--prefix=/opt/boost

成功后应该生成 b2bjam 两个构建工具:

1
2
./b2
./bjam

5.3 编译并安装

1
2
3
4
5
6
7
8
./b2 \
-j$(nproc) \
toolset=gcc \
variant=release \
link=shared \
runtime-link=shared \
threading=multi \
install
  • -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

Boost 版本验证输出(1_82)

输出类似 #define BOOST_LIB_VERSION "1_82" 即安装成功。

6. 下载 mFAST 源码

6.1 获取源码

建议将第三方源码统一放在 /root/src

1
2
mkdir -p /root/src
cd /root/src
1
2
git clone https://github.com/objectcomputing/mFAST.git
cd ./mFAST

git clone mFAST 仓库

国内直连 GitHub 较慢或 clone 失败时,可参考 GitHub 访问慢/下载超时:3 种简单解决方法 中的加速方法。

6.2 拉取子模块(tinyxml2)

mFAST 通过 git submodule 依赖 tinyxml2(XML 解析库),需要显式初始化拉取:

1
git submodule update --init --recursive

执行完成后检查子模块目录:

1
ls tinyxml2

tinyxml2 子模块目录

7. 编译并安装 mFAST

7.1 创建 build 目录

1
2
mkdir -p build
cd build

所有编译生成的文件都放在 build 目录里,方便统一清理。

7.2 配置 CMake

1
2
3
4
5
6
7
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER=gcc \
-DCMAKE_CXX_COMPILER=g++ \
-DBOOST_ROOT=/opt/boost \
-DBoost_NO_SYSTEM_PATHS=ON \
-DCMAKE_INSTALL_PREFIX=/opt/mfast

参数说明:

  • -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

mFAST 编译过程

7.4 安装

1
make install

mFAST 安装过程

8. 验证编译结果

编译安装完成后,/opt 下的目录结构如下:

1
2
3
4
5
6
7
8
9
10
/opt

├── cmake
│ └── CMake 3.31

├── boost
│ └── Boost 1.82

└── mfast
└── mFAST

9. 常见问题排查

1. cmake 配置时提示 CMake 版本过低

确认使用的是新版 cmake:which cmake 应指向 /opt/cmake/bin/cmakecmake --version 显示 3.31.8。若仍是旧版,检查是否已执行 export PATHsource /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