1、查看当前GCC的版本
pf@fNUC12WSKi7:~$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:hsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-9QDOt0/gcc-9-9.4.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)
可以看到对应的gcc的版本为9.4.0
2、gcc,g++,GNU之间的关系,待补充
GCC:GNU Compiler Collection(GUN 编译器集合),最初是作为C语言的编译器(GNU C Compiler),现在可以编译C、C++、JAVA、Fortran、Pascal、Object-C、Ada等语言
gcc是GCC中的GUN
C Compiler(C 编译器) g++是GCC中的GUN C++ Compiler(C++编译器)
gcc 和 g++ 的区别无非就是调用的编译器不同, 并且传递给链接器的参数不同,更准确的说法是:gcc调用了C compiler,而g++调用了C++ compiler
g++:
g++ 会把 .c 文件当做是 C++ 语言 (在 .c 文件前后分别加上 -xc++ 和 -xnone, 强行变成 C++), 从而调用 cc1plus 进行编译
g++ 遇到 .cpp 文件也会当做是 C++, 调用 cc1plus 进行编译
g++ 还会默认告诉链接器, 让它链接上 C++ 标准库
gcc:
gcc 会把 .c 文件当做是 C 语言. 从而调用 cc1 进行编译
gcc 遇到 .cpp 文件, 会处理成 C++ 语言. 调用 cc1plus 进行编译
gcc 默认不会链接上 C++ 标准库
只要是 GCC 支持编译的程序代码,都可以使用 gcc 命令完成编译。可以这样理解,gcc 是 GCC 编译器的通用编译指令,因为根据程序文件的后缀名,gcc 指令可以自行判断出当前程序所用编程语言的类别
但如果使用 g++ 指令,则无论目标文件的后缀名是什么,该指令都一律按照编译 C++ 代码的方式编译该文件。也就是说,对于 .c 文件来说,gcc 指令以 C 语言代码对待,而 g++ 指令会以 C++ 代码对待。但对于 .cpp 文件来说,gcc 和 g++ 都会以 C++ 代码的方式编译
因此并不能说gcc只能编译C代码,g++只能编译C++代码
不能用gcc编译C++程序的原因是:gcc在链接时不能自动和C++程序使用的库联接,因此只能使用g++来完成链接过程
https://gcc.gnu.org/releases.html对应官网
Release Release date
GCC 13.2 July 27, 2023
GCC 10.5 July 7, 2023
GCC 11.4 May 29, 2023
GCC 12.3 May 8, 2023
GCC 13.1 April 26, 2023
GCC 12.2 August 19, 2022
GCC 10.4 June 28, 2022
GCC 9.5 May 27, 2022
GCC 12.1 May 6, 2022
GCC 11.3 April 21, 2022
GCC 11.2 July 28, 2021
GCC 9.4 June 1, 2021
GCC 8.5 May 14, 2021
GCC 11.1 April 27, 2021
GCC 10.3 April 8, 2021
GCC 10.2 July 23, 2020
GCC 10.1 May 7, 2020
GCC 9.3 March 12, 2020
GCC 8.4 March 4, 2020
GCC 7.5 November 14, 2019
GCC 9.2 August 12, 2019
GCC 9.1 May 3, 2019
GCC 8.3 February 22, 2019
GCC 7.4 December 6, 2018
GCC 6.5 October 26, 2018
GCC 8.2 July 26, 2018
GCC 8.1 May 2, 2018
GCC 7.3 January 25, 2018
GCC 5.5 October 10, 2017
GCC 7.2 August 14, 2017
GCC 6.4 July 4, 2017
GCC 7.1 May 2, 2017
GCC 6.3 December 21, 2016
GCC 6.2 August 22, 2016
GCC 4.9.4 August 3, 2016
GCC 5.4 June 3, 2016
GCC 6.1 April 27, 2016
GCC 5.3 December 4, 2015
GCC 5.2 July 16, 2015
GCC 4.9.3 June 26, 2015
GCC 4.8.5 June 23, 2015
GCC 5.1 April 22, 2015
GCC的支持情况
GCC编译器对不同的C++标准的支持情况:
C++17
gcc7完全支持,gcc6和gcc5部分支持,gcc6支持度当然比gcc5高,gcc4及以下版本不支持。
C++14
gcc5完全支持,gcc4部分支持,gcc3及以下版本不支持。
C++11
gcc4.8.1及以上完全支持。gcc4.3部分支持,gcc4.3以下版本不支持。
对应表格:
引用,侵删