Protocol Buffers 提供强大的跨平台支持,使开发人员能够编写在不同操作系统、编译器和硬件架构上一致运行的代码。本页面介绍了 Protocol Buffers 如何实现平台独立以及支持哪些平台。
Protocol Buffers 结合使用条件编译、平台检测宏和精心设计的抽象来在各种环境中保持兼容性。
来源
Protocol Buffers 支持广泛的平台,确保在各种开发环境中具有广泛的兼容性。
Protocol Buffers 支持以下编译器,并有最低版本要求:
| 编译器 | 最低版本 | 备注 |
|---|---|---|
| Clang | 6.0 | 通过编译时检查强制执行 |
| GCC | 7.3 | 通过编译时检查强制执行 |
| MSVC | 2017 (v19.10) | 通过编译时检查强制执行 |
如代码库中所述,所需的最低 C++ 版本为 C++17。
来源
Protocol Buffers 支持多种 CPU 架构,并针对每种架构进行了优化:
| 架构 | 支持级别 | 示例 |
|---|---|---|
| x86-64 (64 位) | 完全支持 | Intel/AMD 现代 CPU |
| x86 (32 位) | 完全支持 | 较旧的 Intel/AMD CPU |
| ARM (32/64 位) | 完全支持 | 移动设备、Raspberry Pi |
| AARCH64 | 完全支持 | 现代 ARM 64 位 |
| MIPS/MIPS64 | 支持 | - |
| PowerPC | 支持 | - |
| SPARC | 支持 | - |
来源
Protocol Buffers 为主流操作系统提供支持:
| 操作系统 | 支持级别 | 备注 |
|---|---|---|
| Linux | 完全支持 | 主要的开发平台 |
| Windows | 完全支持 | Windows 宏特殊处理 |
| macOS | 完全支持 | - |
| iOS | 支持 | 带有线程模型适配 |
| Android | 支持 | 带有线程模型适配 |
| Solaris | 支持 | - |
| AIX | 支持 | - |
| FreeBSD | 支持 | - |
| Emscripten (WebAssembly) | 支持 | - |
来源
Protocol Buffers 采用多种关键抽象机制来确保跨平台的行为一致性。
来源
Protocol Buffers 通过精心设计的抽象来实现跨平台的内存管理。
来源
Protocol Buffers 会根据编译器功能进行调整以获得最佳性能:
来源
Protocol Buffers 提供跨平台的线程局部存储。
来源
Protocol Buffers 针对 Windows 平台进行了特殊处理,尤其是在宏冲突以及 DLL 导出/导入方面。
来源
macOS 和 iOS 的特殊处理
来源
Protocol Buffers 在具有不同字节序的平台之间正确处理数据序列化和反序列化。
来源
在使用 Protocol Buffers 进行跨平台项目时:
包含保护:始终使用正确的包含模式,包含 port_def.inc 和 port_undef.inc
使用提供的宏:利用平台抽象宏,而不是编写特定于平台的代码
PROTOBUF_ALWAYS_INLINE 代替特定于编译器的内联指令PROTOBUF_THREAD_LOCAL 进行线程局部存储PROTOBUF_ATTRIBUTE_WEAK 支持弱符号对齐注意事项:使用提供的对齐宏(如 PROTOBUF_ALIGNAS)以实现正确的内存对齐
跨平台测试:在所有目标平台上验证您的 Protocol Buffers 实现
来源
Protocol Buffers 确立了明确的最低版本要求,以确保兼容性:
代码库包含运行时检查,以验证这些要求是否已满足。
来源
通过利用这些跨平台抽象,Protocol Buffers 在广泛的平台上提供了统一的开发体验,同时仍能利用平台特定的优化(如果可用)。