![g++ 到底是什么?](https://linux22.com/image/1563401/g%2B%2B%20%E5%88%B0%E5%BA%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
有一件事我不明白——那就是问题什么是 g++?
我搜索了整个网络(至少用了我能想到的所有方法)。没有找到任何结果(我最接近 g++ 的答案是这)。
那么 g++ 是专为 GCC 编译器设计的库吗 (或者它本身就是编译器)?我知道通过输入
$sudo apt-get install g++
在基于 Debian 的系统中将安装 g++。但现在我对 g++ 是什么感到很困惑。那么它是一个 C++ 库还是一个编译器本身?据我所知,搜索克++在 Google 上(我敢打赌其他搜索引擎也是如此)没有返回任何有用的结果。
谢谢你的回答。
答案1
GCC 编译器
这里的一个混淆来源是 GCC 有多重含义,有时它可以专门指 C 编译器(“GNU C 编译器”),有时它可以指整个编译器集合(“GNU 编译器集合”)。
GNU 编译器集合,顾名思义,是一组共享一些代码的编译器的集合,其中包括一个 C 编译器和一个 C++ 编译器。
“gcc”和“g++”二进制文件是“编译器驱动程序”,它们负责解析命令行并调用使用正确选项执行实际工作的程序(编译器、链接器、预处理器(如果未集成))。
实际的编译器是 C 的“cc1”和 C++ 的“cc1plus”。
“g++” 具有针对 c++ 的附加行为,因此它可以立即编译和链接 c++ 程序。请参阅https://stackoverflow.com/a/173007/5083516更多细节。
现在介绍 Debian 软件包。
Debian 使用体系结构前缀和版本后缀来命名它的“gcc”和“g++”二进制文件,因此,例如,在我用来撰写本文的 Debian 系统上,“g++”是指向“g++-6”的符号链接,而“g++-6”又是指向 x86_64-linux-gnu-g++-6 的符号链接
Debian“g++”包实际上并不包含编译器,它仅包含从未版本化名称到版本化名称的符号链接,并且(在 Debian 延伸中)依赖于“cpp”、“g++-6”、“gcc”和“gcc-6”(其他版本会有不同的版本号)。
Debian“g++-6”软件包包含 g++ 版本 6.x(在 x86-64 上命名为 x86_64-linux-gnu-g++-6)和 cc1plus(位于特定于编译器版本和目标架构的目录中)的实际二进制文件。
“g++-6” 又依赖于“libstdc++-6-dev”,它包含 c++ 标准库的标头、C++ 标准库的静态版本以及指向 C++ 标准库的动态版本的符号链接(以及几个仅在特殊情况下才重要的其他静态库)
“libstdc++-6-dev” 又依赖于“libstdc++6”,后者包含 C++ 标准库的动态版本(请注意,libstdc++-6-dev 中的 6 和 libstdc++6 中的 6 指的是不同的东西,前者是编译器的版本,后者是标准 C 库的版本)。
因此,安装“g++”包会引入用 C++ 编写程序所需的一切