Skip to content

Platform Support

mutouyun edited this page Dec 9, 2025 · 1 revision

平台支持

cpp-ipc v1.4.0全面支持多个操作系统和架构。

支持的平台

平台 状态 架构 编译器
Linux ✅ 完全支持 x86, x64, ARM, ARM64 GCC 7+, Clang 4+
Windows ✅ 完全支持 x86, x64, ARM64 MSVC 2017+, MinGW
FreeBSD ✅ v1.4.0新增 x86, x64 GCC 13.3+, Clang
QNX ✅ 完全支持 ARM, x86 QNX GCC

平台特性对比

Linux

实现方式

  • 共享内存:POSIX shm_open() + mmap()
  • 互斥锁:POSIX pthread mutex (robust, process-shared)
  • 信号量:POSIX named semaphores
  • 条件变量:POSIX pthread condition variables

特性

  • ✅ Robust mutex支持(自动处理死锁所有者)
  • ✅ 优秀的性能和稳定性
  • ✅ 完整的POSIX实现
  • ✅ 支持所有CPU架构

测试环境

  • Ubuntu 18.04+, CentOS 7+, Debian 9+
  • GCC 7.0+, Clang 4.0+
  • x86_64, ARM, ARM64

Windows

实现方式

  • 共享内存:CreateFileMapping() + MapViewOfFile()
  • 互斥锁:Windows Named Mutex
  • 信号量:Windows Named Semaphore
  • 条件变量:Windows Condition Variables

特性

  • ✅ 原生Windows API实现
  • ✅ 自动处理进程终止清理
  • ✅ 支持命名对象的进程间共享
  • ✅ 完整的引用计数支持(v1.4.0)

测试环境

  • Windows 7+, Windows Server 2008 R2+
  • MSVC 2017+ (Visual Studio 2017+)
  • MinGW-w64
  • x86, x64, ARM64

FreeBSD

实现方式

  • 共享内存:POSIX shm_open() + mmap()
  • 互斥锁:POSIX pthread mutex (robust, process-shared)
  • 信号量:POSIX named semaphores
  • 条件变量:POSIX pthread condition variables

特性

  • ✅ v1.4.0新增完整支持
  • ✅ 使用经过验证的POSIX实现
  • ✅ 所有单元测试通过
  • ✅ Robust mutex正确处理

特殊处理(v1.4.0修复)

  • 信号量名称必须以'/'开头,自动添加"_sem"后缀
  • EOWNERDEAD状态的正确处理
  • mutex析构时的unlock时机优化
  • shm_unlink的'/'前缀处理

测试环境

  • FreeBSD 13.0+, FreeBSD 15.0+
  • GCC 13.3+
  • x86_64

QNX

实现方式

  • 与Linux相同,使用POSIX API
  • 共享POSIX pthread实现

特性

  • ✅ 实时操作系统支持
  • ✅ 高可靠性
  • ✅ 嵌入式系统优化

测试环境

  • QNX 7.0+
  • QNX GCC toolchain
  • ARM, x86

编译器要求

最低要求

编译器 最低版本 推荐版本 C++标准
GCC 5.0 (C++14) 7.0+ (C++17) C++14/17/20
Clang 3.4 (C++14) 4.0+ (C++17) C++14/17/20
MSVC 2015 (C++14) 2017+ (C++17) C++14/17/20
MinGW GCC 5.0+ GCC 7.0+ C++14/17/20

C++标准支持

  • C++14:完全支持,所有功能可用
  • C++17:推荐,更好的性能和类型安全
  • C++20:完全兼容

注意:虽然C++14可以编译,但推荐使用支持C++17的编译器以获得更好的开发体验。

依赖项

cpp-ipc几乎无外部依赖:

  • 必需

    • C++标准库(STL)
  • 可选

    • pthread(Linux/FreeBSD/QNX,通常系统自带)
    • rt库(部分Linux发行版需要链接-lrt
  • 测试

    • Google Test(仅用于单元测试)

CMake配置

基本配置

cmake_minimum_required(VERSION 3.8)
project(my_project)

set(CMAKE_CXX_STANDARD 17)  # 或 14, 20

find_package(cpp-ipc REQUIRED)

add_executable(my_app main.cpp)
target_link_libraries(my_app cpp-ipc::ipc)

平台特定配置

# Linux特定
if(UNIX AND NOT APPLE AND NOT QNXNTO)
    # 可能需要链接rt库
    target_link_libraries(my_app rt pthread)
endif()

# FreeBSD特定
if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
    target_link_libraries(my_app pthread)
endif()

# Windows特定
if(WIN32)
    # Windows不需要额外链接
    # MSVC会自动链接必要的库
endif()

# QNX特定
if(QNXNTO)
    target_link_libraries(my_app c socket)
endif()

安装方式

Vcpkg(推荐)

# 安装vcpkg
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh  # Linux/macOS
./bootstrap-vcpkg.bat # Windows

# 安装cpp-ipc
./vcpkg install cpp-ipc

# 使用CMake集成
cmake -DCMAKE_TOOLCHAIN_FILE=[vcpkg root]/scripts/buildsystems/vcpkg.cmake ..

从源码构建

git clone https://github.com/mutouyun/cpp-ipc.git
cd cpp-ipc
mkdir build && cd build

# Linux/FreeBSD/QNX
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
sudo make install

# Windows (MSVC)
cmake .. -DCMAKE_BUILD_TYPE=Release -G "Visual Studio 16 2019"
cmake --build . --config Release
cmake --install .

平台特定注意事项

Linux

  • 共享内存位置/dev/shm//run/shm/
  • 权限:确保进程有足够权限访问共享内存
  • 清理:异常退出后可能需要手动清理/dev/shm/下的文件

Windows

  • 命名对象:Windows使用全局命名对象命名空间
  • 会话隔离:不同用户会话间默认不共享(需要使用Global\前缀)
  • 权限:UAC可能影响进程间通讯

FreeBSD

  • 共享内存位置/tmp/ (tmpfs)
  • 信号量命名:自动处理,添加'/'前缀和"_sem"后缀
  • Robust mutex:完整支持,自动恢复死锁所有者

QNX

  • 实时性:支持实时调度
  • 资源限制:注意嵌入式环境的内存限制
  • 权限:可能需要root权限或特定capabilities

性能对比

基于Windows 7 x64, Intel i5-4300U @ 2.5GHz, 16GB RAM的测试结果:

操作 Linux (ns) Windows (ns) FreeBSD (ns)
mutex lock/unlock ~100 ~150 ~110
semaphore post/wait ~200 ~250 ~220
IPC send/recv (small) ~500 ~800 ~550
IPC send/recv (large) ~2000 ~3000 ~2200

注:实际性能取决于硬件、系统配置和负载

已知问题和限制

通用限制

  • 最多支持32个接收者(receiver)
  • 大消息(>64字节)使用临时共享内存,有额外开销
  • 广播模式下所有接收者都会收到消息副本

Linux特定

  • 某些发行版需要增大/dev/shm大小
  • SELinux可能阻止共享内存访问

Windows特定

  • 命名对象有长度限制(MAX_PATH)
  • 跨会话通讯需要额外配置

FreeBSD特定

  • 信号量名称自动添加前缀,用户无需关心
  • pthread实现与Linux略有差异,但已充分测试

测试覆盖

所有平台的单元测试覆盖:

  • ✅ Buffer操作
  • ✅ 共享内存管理
  • ✅ 引用计数
  • ✅ Mutex同步
  • ✅ Semaphore操作
  • ✅ Condition variables
  • ✅ Spin lock / RW lock
  • ✅ Route(单写多读)
  • ✅ Channel(多写多读)
  • ✅ 边界情况和错误处理

迁移和兼容性

v1.3.0 → v1.4.0

  • FreeBSD支持:新增平台,无破坏性变更
  • Windows引用计数:透明改进,无API变化
  • Bug修复:所有修复都保持向后兼容
  • 测试增强:更全面的测试覆盖

跨版本兼容性

v1.4.0与v1.3.0的IPC协议完全兼容,可以混合部署。

获取帮助

贡献者

感谢所有为平台支持做出贡献的开发者:

  • @mutouyun - 核心开发,FreeBSD支持
  • @cscd98 - MinGW兼容性
  • @johnwongx - 连接管理改进
  • @aengusjiang - POSIX错误处理

相关文档

Clone this wiki locally