Ubuntu 버전에 따라 기본으로 설치되는 GCC 버전과 C++ 버전이 달라서 헷갈리는 경우가 종종 있어서 참고용으로 매칭 테이블을 작성했습니다.
C++11은 GCC 4.8.1 부터 전체 사양을 지원합니다.
1998년에 첫 번째 표준인 C++ 98이 공개된 후 오랜 기간동안 정체기를 거치다가 2011년이 되어서야 새로운 개념들이 추가된 버전이 공개되었습니다. C++ 11부터 Modern C++ 이라고 부릅니다.
C++ | GCC version |
Description (compiler option) |
C++26 |
GCC 14 ~ | experimental -std=c++2c, -std=gnu++2c |
C++23 | GCC 11 ~ | experimental -std=c++23, -std=c++2b, -std=gnu++2b |
C++20 | GCC 8 ~ | -std=c++20(GCC 11↑), -std=c++2a(GCC 9↓), -std=gnu++20 |
C++17 | GCC 5 ~ GCC 11 (default) ~ | -std=c++17, -std=gnu++17 |
C++14 | GCC 4.9 ~ GCC 6.1 (default) ~ GCC 10 | -std=c++14, -std=gnu++14 |
C++11 | GCC 4.7 ~ GCC 5.x (default?) ~ | -std=c++11, -std=gnu++11 |
C++0x | GCC 4.3 ~ GCC 4.6 (experimental) | |
C++98 | ~ GCC 6.0 (default?) | -std=c++98 |
- C++14는 GCC 5.x 부터 충분히 지원하고 있습니다. (-std=c++14)
- C++17은 GCC 8.x 부터 충분히 지원하고 있습니다. (-std=c++17)
참고로, Ubuntu 22.04에서 기본으로 지원하는 GCC 버전은 11.x.0(C++17)이고 Ubuntu 20.04에서 기본으로 지원하는 GCC 버전은 9.x.0(C++14)입니다.
Ubuntu 20.xx 혹은 22.xx에서 GCC 4.8 이전 버전을 설치하려면 어떻게 해야 할까요? 당연한 얘기겠지만 이전 버전을 지원하는 OS 저장소를 등록한 후 설치해 주시면 됩니다.
$ sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu/ trusty main'
$ sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu/ trusty universe'
$ sudo apt install gcc-4.7 g++-4.7 -y
- trusty: Ubuntu 14.04, xenial: Ubuntu 16.04, bionic: Ubuntu 18.04
- focal: Ubuntu 20.04,
- jammy: Ubuntu 22.04, kinetic: Ubuntu 22.10
- lunar: Ubuntu 23.04
Note ! C++ 표준은 3년 간격으로 제정됩니다.
초안에 버그가 있더라도 2년간의 기능 추가와 1년간의 기능 정지 및 버그 수정 기간으로 진행됩니다. 즉, 2년간의 기능 구현이 완료되지 않았거나 1년간의 버그 수정이 완료되지 않으면 해당 기능은 다음 버전에 포함시키게 됩니다. 그래서, 어떻게든 3년이라는 기간으로 제정된 표준안을 배포하게 되어 있습니다.
원래 배포 버전에 기능을 맞춘 경우는 C++98과 C++11뿐이라고 합니다. 하지만 C++98은 원래 배포 일정이 1994년이었고 C++11은 2009년이었지만 모두 지연된 상태로 배포가 되었습니다. 그러다 보니 기능 완료 기준으로 배포를 하게 될 경우 배포 일정이 무기한 지연되는 현상이 발생하여 이를 방지하고자 2년 + 1년 기준으로 표준안을 제정하고 배포하게 되었습니다.
리눅스(Ubuntu)에서 현재 설치된 C++ 버전을 확인하기 위한 코드는 다음과 같습니다.
// 파일명: check-cxx.cc
// 빌드: $ g++ -o check-cxx check-cxx.cc
#include <iostream>
int main() {
std::cout << "__cplusplus = " << __cplusplus << std::endl;
return 0;
}
C++ 버전 | __cplusplus |
C++98 | 199711L |
C++11 | 201103L |
C++14 | 201402L |
C++17 | 201703L |
C++20 | 202002L |
C++23 | TBD (202100L) |
C++20
C++11 및 C++14의 하향 추세가 계속되고 있으며 사람들이 C++20과 C++23으로 이동하면서 C++17은 미미한 성장만 보여주고 있습니다.
여전히 성능이 중요시되는 게임업체에서는 C++ 을 사용하고 있으며 새 C++ 표준이 발표할때마다 게임 성능을 향상시킬 수 있는 새로운 기능이 포함되어 있는지 많은 관심을 보이고 있습니다.
참고 사이트
- C++ Standards Support in GCC
- 리눅스에서 C/C++ 컴파일러(Compiler) 설치
- Why does the C++ standard ship every three years?
- 2023년 C++ 에코시스템: C++20의 성장 - blog.jetbrains.com
'Programming > C++' 카테고리의 다른 글
glibc 버전을 확인하려면... (1) | 2023.10.26 |
---|---|
ARM 크로스 컴파일(Cross Compile) (0) | 2023.05.26 |
리눅스 C++ 공유라이브러리 만들기 (0) | 2022.09.06 |
C/C++(gcc/g++) 컴파일러(Compiler) 설치 (0) | 2022.04.28 |
ldconfig (0) | 2022.04.17 |