Files
Alicho/docs/references/dependencies.md
2025-10-28 10:27:49 +08:00

11 KiB
Raw Permalink Blame History

环境要求与依赖项

本文档详细说明C++23跨平台音频后端系统的环境要求和外部依赖项包括必要的库、工具和编译器。

系统要求

操作系统支持

系统设计为在以下平台上运行:

操作系统 最低版本 推荐版本 备注
Windows Windows 10 (1909+) Windows 11 需要64位版本
Linux Ubuntu 20.04+ / Debian 11+ / CentOS 8+ Ubuntu 22.04 需要glibc 2.31+
macOS macOS 11.0+ (Big Sur) macOS 14.0+ 支持Intel和Apple Silicon

编译器要求

由于使用了C++23的特性需要较新版本的编译器:

编译器 最低版本 推荐版本 备注
MSVC 19.30 (VS 2022) 最新版 需要包含C++23支持
GCC 13.0 13.2+ 完全支持C++23
Clang 17.0 17.0+ 完全支持C++23
AppleClang 15.0 16.0+ macOS系统

硬件要求

组件 最低要求 推荐配置 说明
CPU 4核心支持SSE4.2 8核心支持AVX2/AVX-512 音频处理性能与CPU能力直接相关
内存 8GB RAM 16GB+ RAM 插件沙盒需要额外内存
存储 1GB可用空间 10GB+ SSD 构建时需要更多空间

核心依赖项

构建系统

  • CMake (3.27.0+)

    • 用途: 跨平台构建系统
    • 配置选项: 无特殊要求
    • 获取方式: cmake.org
  • Conan (2.0.0+)

    • 用途: C++包管理器,用于管理第三方库
    • 配置选项: 使用2.0版本的新配置格式
    • 获取方式: pip install conan>=2.0.0

必需库

  • Boost (1.88.0+)

    • 用途:
      • Boost.Process: 管理沙盒进程
      • Boost.Interprocess: 共享内存实现
      • Boost.Asio: 网络通信
    • 配置选项: 需要头文件和编译库
    • 获取方式: 通过Conan自动获取
  • ZeroMQ (4.3.5+)

    • 用途: 进程间通信的消息队列
    • 配置选项: 默认配置即可
    • 获取方式: 通过Conan自动获取
  • cppzmq (4.11.0+)

    • 用途: ZeroMQ的C++绑定
    • 配置选项: 无特殊要求
    • 获取方式: 通过Conan自动获取
  • Protobuf (3.21.12+)

    • 用途: 消息序列化
    • 配置选项: 需要protoc编译器和运行时库
    • 获取方式: 通过Conan自动获取
  • spdlog (1.14.1+)

    • 用途: 高性能日志库
    • 配置选项: 建议启用异步日志
    • 获取方式: 通过Conan自动获取
  • fmt (10.2.1+)

    • 用途: 现代字符串格式化库被spdlog使用
    • 配置选项: 无特殊要求
    • 获取方式: 通过Conan自动获取

其他必需库

  • nlohmann_json (3.11.3+)

    • 用途: JSON处理
    • 配置选项: 无特殊要求
    • 获取方式: 通过Conan自动获取
  • yaml-cpp (0.8.0+)

    • 用途: YAML配置文件处理
    • 配置选项: 无特殊要求
    • 获取方式: 通过Conan自动获取

可选库

  • Eigen (3.4.0+)

    • 用途: 矩阵和线性代数运算
    • 配置选项: 建议启用SIMD优化
    • 获取方式: 通过Conan自动获取
    • 可选性: 某些高级音频处理算法需要
  • onetbb (2022.2.0+) / Intel TBB

    • 用途: 任务并行库
    • 配置选项: 无特殊要求
    • 获取方式: 通过Conan自动获取
    • 可选性: 用于多线程处理优化

测试和调试依赖

  • gtest (1.14.0+)

    • 用途: 单元测试框架
    • 配置选项: 无特殊要求
    • 获取方式: 通过Conan自动获取
  • benchmark (1.8.3+)

    • 用途: 性能测试
    • 配置选项: 无特殊要求
    • 获取方式: 通过Conan自动获取

平台特定依赖

Windows 平台

  • ASIO SDK (可选)

    • 用途: 低延迟音频设备访问
    • 配置选项: 需要单独下载和安装
    • 获取方式: Steinberg ASIO SDK
  • DirectSound SDK (随Windows SDK提供)

    • 用途: Windows音频设备访问
    • 配置选项: 安装Windows SDK时选中
    • 获取方式: Windows SDK

Linux 平台

  • ALSA开发库 (1.2.0+)

    • 用途: Linux音频设备访问
    • 配置选项: 无特殊要求
    • 获取方式:
      • Ubuntu/Debian: sudo apt-get install libasound2-dev
      • CentOS/RHEL: sudo yum install alsa-lib-devel
  • PulseAudio开发库 (可选)

    • 用途: PulseAudio音频设备访问
    • 配置选项: 无特殊要求
    • 获取方式:
      • Ubuntu/Debian: sudo apt-get install libpulse-dev
      • CentOS/RHEL: sudo yum install pulseaudio-libs-devel
  • JACK开发库 (可选)

    • 用途: JACK音频设备访问专业音频应用
    • 配置选项: 无特殊要求
    • 获取方式:
      • Ubuntu/Debian: sudo apt-get install libjack-jackd2-dev
      • CentOS/RHEL: sudo yum install jack-audio-connection-kit-devel
  • 开发工具

    • 用途: 构建所需的基本工具
    • 获取方式:
      • Ubuntu/Debian: sudo apt-get install build-essential pkg-config
      • CentOS/RHEL: sudo yum groupinstall 'Development Tools'

macOS 平台

  • Xcode Command Line Tools

    • 用途: 提供基本编译器和开发工具
    • 获取方式: xcode-select --install
  • CoreAudio Framework (系统自带)

    • 用途: macOS音频设备访问
    • 配置选项: 无需额外配置
  • Homebrew (推荐)

    • 用途: 包管理器,简化依赖安装
    • 获取方式: brew.sh

依赖配置和安装

使用Conan自动安装依赖

项目使用Conan包管理器来管理和安装大多数依赖项。完整的依赖配置在项目根目录的conanfile.txt文件中:

[requires]
boost/1.88.0
zeromq/4.3.5
cppzmq/4.11.0
protobuf/3.21.12
spdlog/1.14.1
fmt/10.2.1
nlohmann_json/3.11.3
yaml-cpp/0.8.0
gtest/1.14.0
benchmark/1.8.3
eigen/3.4.0
onetbb/2022.2.0

[generators]
CMakeDeps
CMakeToolchain

[options]
boost:shared=True
zeromq:shared=True
protobuf:shared=True
spdlog:header_only=False
eigen:MPL2_only=True

手动依赖管理

如果您选择不使用Conan可以手动安装所需的依赖项:

Windows:

  • 使用vcpkg: vcpkg install boost zeromq cppzmq protobuf spdlog fmt nlohmann-json yaml-cpp gtest benchmark eigen tbb --triplet=x64-windows
  • 或使用预编译二进制包

Linux:

# Ubuntu/Debian
sudo apt-get install libboost-all-dev libzmq3-dev libprotobuf-dev protobuf-compiler \
                     libspdlog-dev libfmt-dev nlohmann-json3-dev libyaml-cpp-dev \
                     googletest libeigen3-dev libtbb-dev

# CentOS/RHEL
sudo yum install boost-devel zeromq-devel protobuf-devel protobuf-compiler \
                 spdlog-devel fmt-devel json-devel yaml-cpp-devel \
                 gtest-devel eigen3-devel tbb-devel

macOS:

brew install boost zeromq protobuf spdlog fmt nlohmann-json yaml-cpp \
             googletest benchmark eigen tbb

依赖版本兼容性说明

某些依赖项对编译器版本有特定要求:

  • Boost 1.88.0 需要C++17支持但们项目需要C++23
  • ZeroMQ 4.3.5在Windows下编译需要Visual Studio 2019或更新版本
  • Protobuf 3.21+与低版本有二进制不兼容问题,项目中需确保使用一致版本
  • TBB在不同平台上行为可能略有差异需进行兼容性测试

依赖项功能说明

Boost 库核心组件

项目主要使用Boost的以下组件:

  1. Boost.Interprocess

    • 用途: 实现基于共享内存的进程间通信
    • 关键类: shared_memory_object, mapped_region, interprocess_mutex
    • 配置要求: 需要共享库支持
  2. Boost.Process

    • 用途: 管理插件沙盒进程
    • 关键类: child, environment
    • 平台特定性: Windows/Linux/macOS实现有差异
  3. Boost.Filesystem

    • 用途: 跨平台文件系统操作
    • 关键类: path, directory_iterator
  4. Boost.Asio

    • 用途: 异步网络通信
    • 关键类: io_context, socket

ZeroMQ消息模式

项目使用的ZeroMQ通信模式:

  1. PUB/SUB

    • 用途: 广播状态消息和事件
    • 配置: 发布者(PUB)向多个订阅者(SUB)发送消息
  2. REQ/REP

    • 用途: 同步请求/响应通信
    • 配置: 严格的请求-响应顺序
  3. PUSH/PULL

    • 用途: 数据流水线处理
    • 配置: 多阶段处理管道

Protobuf消息定义

项目使用Protobuf进行消息定义和序列化:

  1. 消息类型

    • audio_meta.proto: 音频元数据消息
    • control.proto: 控制命令消息
    • status.proto: 状态报告消息
    • plugin_mgmt.proto: 插件管理消息
  2. 编译流程

    • 使用protoc编译器生成C++代码
    • CMake中自动化调用protoc

故障排除

常见问题和解决方案

  1. Boost版本冲突

    • 问题: 系统安装的Boost版本与项目要求不一致
    • 解决: 优先使用Conan管理的Boost避免与系统版本混用
  2. ZeroMQ连接问题

    • 问题: 防火墙可能阻止ZeroMQ通信
    • 解决: 确保防火墙允许本地端口访问
  3. SIMD指令集不兼容

    • 问题: 运行时CPU不支持编译时启用的指令集
    • 解决: 编译时添加运行时检测,自动降级到兼容指令集
  4. Linux下共享内存权限问题

    • 问题: 无法创建或访问共享内存区域
    • 解决: 检查用户权限和系统限制 (/proc/sys/kernel/shm*)
  5. macOS下沙盒权限问题

    • 问题: 沙盒进程无法访问所需资源
    • 解决: 正确配置沙盒配置文件,添加必要的权限说明

依赖项冲突解决

在复杂系统中,依赖版本冲突是常见问题。以下策略可以帮助解决:

  1. 隔离依赖

    • 尽可能通过Conan隔离项目依赖避免与系统库冲突
  2. 命名空间隔离

    • 对于头文件库,可以考虑使用自定义命名空间包装
  3. 静态链接

    • 对于关键组件,考虑静态链接以避免运行时冲突

依赖项更新策略

项目采用以下依赖更新策略:

  1. 定期更新

    • 每季度评估一次依赖更新需求
    • 安全修复立即更新
  2. 版本锁定

    • 在发布版本中锁定依赖版本
    • 开发分支可以测试新版本依赖
  3. 兼容性测试

    • 依赖更新前进行全面的兼容性测试
    • 保持测试覆盖以发现潜在问题

附录:完整依赖图

Audio Backend
├── 构建系统
│   ├── CMake (3.27.0+)
│   └── Conan (2.0.0+)
├── 核心依赖
│   ├── Boost (1.88.0+)
│   ├── ZeroMQ (4.3.5+)
│   ├── cppzmq (4.11.0+)
│   ├── Protobuf (3.21.12+)
│   ├── spdlog (1.14.1+)
│   └── fmt (10.2.1+)
├── 数据处理
│   ├── nlohmann_json (3.11.3+)
│   └── yaml-cpp (0.8.0+)
├── 性能优化
│   ├── Eigen (3.4.0+) [可选]
│   └── onetbb (2022.2.0+) [可选]
├── 测试框架
│   ├── gtest (1.14.0+)
│   └── benchmark (1.8.3+)
└── 平台特定
    ├── Windows
    │   ├── ASIO SDK [可选]
    │   └── DirectSound [Windows SDK]
    ├── Linux
    │   ├── ALSA (libasound2)
    │   ├── PulseAudio [可选]
    │   └── JACK [可选]
    └── macOS
        └── CoreAudio [系统库]