在 ubuntu 上将默认 c++ 库从 std=c++14 切换到 std=c++17
Switch default c++ library from std=c++14 to std=c++17 on ubuntu
我试图在 ubuntu 上安装一个需要 c++17 或更新的库的包。
我安装了 gcc-10 和 g++-10。我还发现默认的 c++ 库是 c++14 通过使用此代码:
man g++ | grep "This is the default for C++ code"
但我不知道如何将其更改为其他版本。
要运行一个简单的代码我们可以使用-std=c++17
。但是我认为安装包需要更改默认库。
C++ 标准库传统上是编译器的一部分。在 GNU/Linux 系统上,GCC 通常与其标准库一起使用。另一种选择是 CLang。
注意,标准版不仅仅是库,更重要的是需要编译器直接实现的语言特性。
每个编译器版本都有一个默认的标准版本,但支持多个。
在编译期间 select 特定标准版本的正确方法是通过编译器标志。如果软件依赖于特定版本,这应该是软件构建系统的一部分。
可以在环境变量中设置编译器标志,例如CXXFLAGS
。然后这些被流行的构建助手识别,如 GNU Make 或 CMake。由于要使用的标准版本与要编译的软件密切相关,因此将标准版本放入环境中并不是一个好的做法。
但是如果几个软件是用不同的标准版本构建的,会有问题吗?一点都不。即使你 link 它们在一起,ABI 兼容性也是跨标准给出的。有关该主题的详细答案,请参阅 。
请注意,您在 Ubuntu 中安装的软件包都是预编译的,因此您无法控制它们的编译方式。
我试图在 ubuntu 上安装一个需要 c++17 或更新的库的包。 我安装了 gcc-10 和 g++-10。我还发现默认的 c++ 库是 c++14 通过使用此代码:
man g++ | grep "This is the default for C++ code"
但我不知道如何将其更改为其他版本。
要运行一个简单的代码我们可以使用-std=c++17
。但是我认为安装包需要更改默认库。
C++ 标准库传统上是编译器的一部分。在 GNU/Linux 系统上,GCC 通常与其标准库一起使用。另一种选择是 CLang。
注意,标准版不仅仅是库,更重要的是需要编译器直接实现的语言特性。
每个编译器版本都有一个默认的标准版本,但支持多个。 在编译期间 select 特定标准版本的正确方法是通过编译器标志。如果软件依赖于特定版本,这应该是软件构建系统的一部分。
可以在环境变量中设置编译器标志,例如CXXFLAGS
。然后这些被流行的构建助手识别,如 GNU Make 或 CMake。由于要使用的标准版本与要编译的软件密切相关,因此将标准版本放入环境中并不是一个好的做法。
但是如果几个软件是用不同的标准版本构建的,会有问题吗?一点都不。即使你 link 它们在一起,ABI 兼容性也是跨标准给出的。有关该主题的详细答案,请参阅
请注意,您在 Ubuntu 中安装的软件包都是预编译的,因此您无法控制它们的编译方式。