Ubuntu 22 也能用上 g++13/gcc13!保姆级安装教程来了!
g++13/gcc13 保姆级安装教程来了!
- 一、背景
- 二、准备工作
- 三、安装 g++13 和 gcc13
- 四、常见问题
- 五、总结
一、背景
随着 C++ 标准的不断演进,迎来了 C++23 这一激动人心的新版本。它引入了许多强大的新特性,旨在提升开发效率、代码质量和程序性能。但是,要充分体验 C++23 的魅力,需要一个能够支持该语法的编译器。
经过查阅,了解到支持 C++23 的最低编译器版本是 g++13。如果想尝试 C++23 的新特性,需要升级我们的 g++ 版本。
本文将聚焦于如何在 Ubuntu 22.04 这个主流 Linux 发行版上安装 g++13 编译器,快速配置好开发环境,并开始探索 C++23 的新世界。如果你和我一样正在使用 Ubuntu 22.04,并且渴望体验 C++23 的新功能,那么本文将为你提供一份 “保姆级” 的安装指南。
二、准备工作
(1)检查当前 gcc 和 g++ 版本:
gcc -v
g++ -v
附上效果:
~$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --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-bootstrap --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 --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --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-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)
~$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --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-bootstrap --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 --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --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-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)
(2)默认的PPA源下载速度非常慢,为了提高下载速度,使用国内PPA源(中科大代理 PPA地址: launchpad.proxy.ustclug.org)。修改 /etc/apt/sources.list.d/
下面的ubuntu-toolchain-r-ubuntu-test-jammy.list
文件需要代理的仓库地址,将 ppa.launchpad.net
换成 launchpad.proxy.ustclug.org
,如下所示:
#deb https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu/ jammy main
deb https://launchpad.proxy.ustclug.org/ubuntu-toolchain-r/test/ubuntu/ jammy main
# deb-src https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu/ jammy main
注意,要使用超级权限才能修改,比如sudo vim /etc/apt/sources.list.d/ubuntu-toolchain-r-ubuntu-test-jammy.list
。
然后更新系统软件包:
sudo apt update
sudo apt upgrade
(3)安装必要的依赖包:
sudo apt install build-essential
三、安装 g++13 和 gcc13
直接执行下面的命令安装:
sudo apt install gcc-13
sudo apt install g++-13
在成功安装 gcc-13
和 g++-13
之后,需要将其设置为系统默认的编译器版本。因为系统中可能存在多个版本的 gcc
和 g++
,我们需要使用 update-alternatives
工具来管理这些版本,并选择我们要使用的默认版本。
update-alternatives
是一个在 Debian 及其衍生发行版 (如 Ubuntu) 中用于管理系统中多个可替换命令的工具。它允许为同一个命令(如 gcc
或 g++
)指定多个不同的实现,并在它们之间进行切换。
配置默认 gcc
版本:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 11
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 13
配置默认 g++
版本:
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 11
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 13
如果不清楚安装了哪些编译器版本,也可以用如下命令指定:
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
执行该命令后,会看到类似以下的输出:
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/bin/gcc-11 20 auto mode
* 1 /usr/bin/gcc-11 20 manual mode
2 /usr/bin/gcc-13 100 manual mode
Press <enter> to keep the current choice[*], or type selection number:
检查 gcc 和 g++ 的版本:
gcc -v
g++ -v
仅仅确认版本号还不够,需要编写一个简单的 C++ 程序来测试 g++-13
是否能够正常编译和运行。
hello.cpp
文件的代码内容:
#include
int main()
{
std::cout << "Hello, g++-13 world!" << std::endl;
return 0;
}
使用 g++
编译 hello.cpp
:
g++ hello.cpp -o hello
运行程序它会在屏幕上输出 “Hello, g+±13 world!”。
四、常见问题
错误 1:PPA 不可用 (404 Not Found)。
可以尝试更换其他的 PPA 源,比如中科大代理 PPA地址: launchpad.proxy.ustclug.org。
错误 2:依赖包缺失。
sudo apt update
更新软件包列表;错误提示中会列出缺失的依赖包的名称,使用 sudo apt install <依赖包名称>
命令逐个安装。如果依赖包又依赖于其他包,重复此步骤,直到所有依赖包都安装完成。 这通常比较繁琐。
错误 3:权限问题
在所有需要管理员权限的命令前都加上 sudo
。如果还是不行,使用 sudo -l
命令查看你的用户权限。
错误 4:与其他版本的 gcc/g++ 冲突
使用 update-alternatives
正确配置默认版本,使用 sudo update-alternatives --config gcc
和 sudo update-alternatives --config g++
命令,明确指定要使用的版本。或者确定某个旧版本不再需要,可以将其卸载,以避免冲突。 使用 sudo apt remove <旧版本gcc/g++名称>
命令卸载。
重要技巧: 在解决错误时,仔细阅读错误提示信息。 错误提示通常会提供有关错误原因和解决方法的重要线索。
五、总结
使用 g++-13
和 gcc-13
的好处:
- 新版本的编译器能够更好地支持最新的 C++ 标准,例如 C++20 和 C++23 的新特性。
- 新版本的编译器通常会进行各种性能优化。
- 新版本的编译器通常会提供更强大的静态分析功能。
关于 gcc
和 g++
学习的资料链接:
- GCC 官方文档: https://gcc.gnu.org/onlinedocs/ (英文)
- GNU Make 教程: https://www.gnu.org/software/make/manual/make.html (英文) (了解如何使用 Makefiles 管理项目)
- C++ 官方网站: https://isocpp.org/ (英文) (C++ 标准的官方信息)
- cppreference.com: https://en.cppreference.com/w/ (英文) (C++ 参考文档,非常全面)