在 Linux 下用 C++ 开发时,“选版本”通常涉及三层概念,搞清楚这三层就能避免踩坑:
✅ 这是你写代码时遵循的 C++ 标准
常见版本:
g++ -std=c++17 main.cpp -o main
CMake 中:
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
✅ 决定你能用哪个 C++ 标准
g++ --version
clang++ --version
| 编译器 | C++17 | C++20 |
|---|---|---|
| gcc 7 | ❌ | ❌ |
| gcc 9 | ✅ | ⚠️ |
| gcc 11+ | ✅ | ✅ |
| clang 10+ | ✅ | ✅ |
sudo apt install g++-11
g++-11 -std=c++20 main.cpp
ldd --version
⚠️ 库版本必须和编译器 & 标准匹配
✅ 最稳组合(2024)
Linux (Ubuntu 22.04)
gcc 11 / clang 14
C++17
✅ 前沿组合
Linux + gcc 13
C++20
echo | g++ -dM -E -x c++ - | grep cplusplus
输出示例:
#define __cplusplus 201703L // C++17
❌ 系统 gcc 太老却写 C++20
❌ CMake 没设 CXX_STANDARD
❌ 混用不同 gcc 编译的库
如果你愿意,可以告诉我:
我可以给你一套精确配置方案。