-
Notifications
You must be signed in to change notification settings - Fork 385
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 |
实现方式:
- 共享内存: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
实现方式:
- 共享内存:
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
实现方式:
- 共享内存: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
实现方式:
- 与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++14:完全支持,所有功能可用
- C++17:推荐,更好的性能和类型安全
- C++20:完全兼容
注意:虽然C++14可以编译,但推荐使用支持C++17的编译器以获得更好的开发体验。
cpp-ipc几乎无外部依赖:
-
必需:
- C++标准库(STL)
-
可选:
- pthread(Linux/FreeBSD/QNX,通常系统自带)
- rt库(部分Linux发行版需要链接
-lrt)
-
测试:
- Google Test(仅用于单元测试)
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
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 .-
共享内存位置:
/dev/shm/或/run/shm/ - 权限:确保进程有足够权限访问共享内存
-
清理:异常退出后可能需要手动清理
/dev/shm/下的文件
- 命名对象:Windows使用全局命名对象命名空间
- 会话隔离:不同用户会话间默认不共享(需要使用Global\前缀)
- 权限:UAC可能影响进程间通讯
-
共享内存位置:
/tmp/(tmpfs) - 信号量命名:自动处理,添加'/'前缀和"_sem"后缀
- Robust mutex:完整支持,自动恢复死锁所有者
- 实时性:支持实时调度
- 资源限制:注意嵌入式环境的内存限制
- 权限:可能需要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字节)使用临时共享内存,有额外开销
- 广播模式下所有接收者都会收到消息副本
- 某些发行版需要增大
/dev/shm大小 - SELinux可能阻止共享内存访问
- 命名对象有长度限制(MAX_PATH)
- 跨会话通讯需要额外配置
- 信号量名称自动添加前缀,用户无需关心
- pthread实现与Linux略有差异,但已充分测试
所有平台的单元测试覆盖:
- ✅ Buffer操作
- ✅ 共享内存管理
- ✅ 引用计数
- ✅ Mutex同步
- ✅ Semaphore操作
- ✅ Condition variables
- ✅ Spin lock / RW lock
- ✅ Route(单写多读)
- ✅ Channel(多写多读)
- ✅ 边界情况和错误处理
- FreeBSD支持:新增平台,无破坏性变更
- Windows引用计数:透明改进,无API变化
- Bug修复:所有修复都保持向后兼容
- 测试增强:更全面的测试覆盖
v1.4.0与v1.3.0的IPC协议完全兼容,可以混合部署。
- Issues:GitHub Issues
- Wiki:GitHub Wiki
- Release Notes:v1.4.0 Release
感谢所有为平台支持做出贡献的开发者:
- @mutouyun - 核心开发,FreeBSD支持
- @cscd98 - MinGW兼容性
- @johnwongx - 连接管理改进
- @aengusjiang - POSIX错误处理
- Home - 项目主页
- Tutorial - 使用教程
- API Reference - API参考