下面从开发环境、编译器、系统接口、构建工具、路径/编码、库与依赖、调试与部署几个方面,对比 Linux C++ 与 Windows C++ 的主要区别,并给出常见“坑点”和配置建议。
g++ main.cpp -o app -std=c++17 -O2
cl main.cpp /EHsc /std:c++17
✅ 建议:
| 项目 | Linux | Windows |
|---|---|---|
| 路径分隔符 | / |
\ 或 / |
| 根目录 | / |
C:\ |
| 大小写 | 敏感 | 不敏感 |
// 跨平台写法
#ifdef _WIN32
#define PATH_SEP "\\"
#else
#define PATH_SEP "/"
#endif
| 功能 | Linux | Windows |
|---|---|---|
| 原生线程 | pthread | Windows API |
| C++ 标准 | std::thread ✅ |
std::thread ✅ |
✅ 推荐:统一用 std::thread
<sys/socket.h><winsock2.h> + 初始化#ifdef _WIN32
WSADATA wsa;
WSAStartup(MAKEWORD(2,2), &wsa);
#endif
Makefile、CMake、Ninjaapt、yum、pacman.sln)CMakevcpkgconan✅ 推荐:CMake 跨平台统一构建
cmake_minimum_required(VERSION 3.16)
project(demo)
add_executable(demo main.cpp)
| 类型 | Linux | Windows |
|---|---|---|
| 动态库 | .so |
.dll |
| 静态库 | .a |
.lib |
| 导入库 | 不需要 | 需要 .lib |
// Windows 导出
__declspec(dllexport)
// Linux 默认导出
| 项目 | Linux | Windows |
|---|---|---|
| 默认编码 | UTF-8 | GBK / UTF-16 |
| 宽字符 | wchar_t=4字节 |
wchar_t=2字节 |
✅ 建议:
std::string + UTF-8wchar_t 跨平台逻辑| 功能 | Linux | Windows |
|---|---|---|
| 调试器 | gdb |
Visual Studio Debugger |
| 性能 | perf |
Visual Studio Profiler |
| 内存 | valgrind |
Dr. Memory |
WSAStartup-pthreadsleep 不同
usleep / sleepSleep(ms)✅ 使用:
CMakestd::filesystemstd::thread#if defined(_WIN32)
// Windows
#elif defined(__linux__)
// Linux
#endif
如果你愿意,我可以:
你现在是学习阶段还是实际项目迁移?