标准库在哪里?

时间:2015-03-01 18:21:56

标签: c++ codeblocks

我搜索了谷歌,但没有找到我的查询的直接答案。

我一直在阅读C ++ Primer,而且我对这门语言还很陌生,但尽管本书有多好,但它讨论了标准库的使用,但并没有真正描述它的位置或位置它来自(它还没有)。那么,标准库在哪里?哪些头文件可以让我访问它?当我下载CodeBlocks时,STL是否附带了它?或者它是自动附带我的操作系统?

有些相关,但Cobeblocks附带的MinGW究竟是什么? Here它说

  

MinGW是一个C / C ++编译器套件,它允许您创建Windows可执行文件而不依赖于此类DLL

所以在最基本的层面上它只是一个"事物的集合"需要让我制作C ++程序吗?

对这个非常基本的问题抱歉。

3 个答案:

答案 0 :(得分:5)

  

"当我下载CodeBlocks时,STL是否附带了它?"

尽管它不是称为 STL ,而是 C ++标准库,但它带有您的c ++编译器实现(并且可选地与CodeBlocks IDE一起打包)

您必须区分IDE和编译器工具链。 CodeBlocks( I 集成的 D 开发 E 环境)可以配置为使用许多不同的编译器工具链(例如Clang或MSVC)。 / p>

  

"或者它会自动附带我的操作系统吗?"

不,通常不会。特别是不适用于Windows操作系统

  

"那么,标准库在哪里?哪些头文件可以让我访问它?"

它们带有您当前用于CodeBlocks项目的编译器工具链 假设这是MinGW GCC工具链并且它安装在默认目录中,您将在一个目录下找到这些库(就像我拥有的​​那样)

C:\MinGW\lib\gcc\mingw32\4.8.1

处的头文件
C:\MinGW\lib\gcc\mingw32\4.8.1\include\c++
  

"所以在最基本的层面上它只是一个"事物的集合"需要让我制作C ++程序吗?"

它是Windows的Minimalist GNU工具链。它通常伴随着GCC(GNU C / C ++编译器工具链),以及MSYS极简主义GNU工具环境(包括GNU make,shell等)。

答案 1 :(得分:3)

安装 C ++实现后,您将拥有实现使用C ++源文件并将其转换为运行所需的所有内容的东西。如何完成取决于具体的C ++实现。通常,有一个编译器处理单个源文件并将它们转换为目标文件,然后由链接器组合以生成实际文件运行程序。这绝不是必需的,例如,cling直接解释C ++代码而不编译。

所有这些只是为了澄清C ++的实现方式没有一种方法,尽管大多数现代C ++实现都遵循编译器/链接器的方法,并提供库作为带有声明和库文件的文件集合,提供这些实现声明。

C ++标准库所在的位置以及要求其声明的位置完全取决于C ++实现。奇怪的是,到目前为止我遇到的所有C ++实现除了cling之外都使用编译器,并且所有这些编译器都支持-E选项(尽管它拼写为/E用于MSVC ++),它预处理C ++文件。通常非常大的输出显示指向声明位置的包含文件的位置。也就是说,在命令行上执行此类操作会生成一个文件,其中包含有关位置的信息:

compiler -E input.cpp > input.ii

编译器compiler的实际命名方式完全取决于C ++实现,类似于g++clang++等。文件input.cpp应包含适用于标准C ++库头之一的include指令,例如

#include <iostream>

在输出input.ii中搜索应显示此标头的位置。当然,编译器可以在不实际包含文件的情况下提供声明,而只是使声明可见。曾经有过像这样的编译器(TenDRA),但我不知道有任何现代编译器这样做(考虑modules标准化,这些可能会在将来出现)

实际库文件与实现各种声明的对象所在的位置是一个完全不同的问题,并且定位这些文件往往会更复杂。

安装CodeBlocks时,可能会以某种方式安装C ++实现。我认为它只是一个包。在某些Linux上使用像dpkg这样的包管理系统的系统上,让IDE依赖于编译器(例如,代码块的gcc)并使编译器依赖于标准C ++库(libstdc ++ for gcc)并让包管理系统理清事物的安装方式。

答案 2 :(得分:0)

C ++标准库有几种实现方式。一些比较流行的版本是libstdc++,其中包含GCC,libc++,可以与Clang一起使用,或者由Visual Studio's implementation与Microsoft一起使用。他们使用Dinkumware实施的许可版本。 MinGW包含GCC端口。 CodeBlocks是一个IDE,允许您选择与MinGW版本一起打包的设置,或者不包含MinGW版本的设置。无论哪种方式,您仍然可以设置IDE以使用不同的编译器(如果您选择)。标准库实现的一部分也将是头文件,而不仅仅是二进制文件,因为很多是模板代码(只能在头文件中实现。)

我建议您阅读相应技术的文档,因为它们包含大量信息,而不仅仅是教程或书籍:

libstdc++ faq

MinGW faq

MSDN