C++ Linux 跨平台开发实战指南
一 核心原则
二 条件编译与可移植细节
三 构建系统与工具链
四 常见差异与解决方案
| 差异点 | 推荐做法 | 说明 |
|---|---|---|
| 文件路径 | 统一用 std::filesystem::path 或 ‘/’ | 避免手写分隔符,跨平台一致 |
| 线程与并发 | 用 std::thread、 |
替代 pthread_create/CreateThread |
| 网络编程 | 用 Boost.Asio 或跨平台网络库 | 避免直接使用 socket/WinSock |
| 动态库导出 | 用宏封装 __declspec(dllexport)/visibility | 保证符号导出跨平台一致 |
| 字节序 | 统一 网络字节序(大端) | 文件/协议格式显式序列化 |
| 结构体对齐 | 避免直接 fwrite/fread 结构体 | 定义序列化方法或使用 #pragma pack 并注释 |
| 换行符 | 统一 LF(\n) | 工具链与版本控制保持一致 |
| 源码 BOM | 使用 UTF-8 无 BOM | 防止 Linux 编译报错 |
| 宽字符 | 优先 UTF-8 与标准库 | 规避 wchar_t 宽度差异 |
| 第三方依赖 | vcpkg/Conan/系统包管理器 | 可复现构建与版本对齐 |
五 最小示例与工程骨架