C ++标准库的标头在哪里?

时间:2012-07-12 17:52:17

标签: c++ linux stl header-files c++-standard-library

我想知道我的文件系统在哪里找到了C ++标准库的标题。特别是我正在寻找矢量模板的定义。我在/ usr / include /和各个子目录中搜索。我也试过'locate vector.h',它提出了很多矢量的实现,但不是标准的。我错过了什么? (分布是Gentoo)

背景:我正在分析一个在大多数情况下迭代过矢量的库,而gprof显示大部分时间花在

std::vector<int, std::allocator<int> >::_M_insert_aux(
  __gnu_cxx::__normal_iterator<int*, std::vector<
      int, std::allocator<int> > >, int const&)

可能这是std :: vector :: push_back内部发生的事情,但我不确定。

6 个答案:

答案 0 :(得分:30)

GCC通常在/usr/include/c++/<version>/中安装标准C ++标头。您可以运行gcc -v以找出已安装的版本。

至少在我的版本中,没有vector.h;公共标题只是vector(没有扩展名),大多数实现都在bits/stl_vector.h

我的Ubuntu发行版就是这种情况;您的发行可能会有所不同。

答案 1 :(得分:10)

运行g++ -v -v -v会输出很多内容,包括搜索到的所有包含目录。 vector就是其中之一。

答案 2 :(得分:2)

在我的Debian Stable系统上vector在这里:

/usr/include/c++/4.4/vector

答案 3 :(得分:1)

在“普通”ubuntu安装中,您必须安装

libstdc++- 版本 -dev

获取头文件。

然后检查已安装的文件,你将获得路径!

答案 4 :(得分:0)

在许多IDE(例如NetBeans)中,您可以使用Ctrl+Click到className转到定义

答案 5 :(得分:0)

文件位置实际上取决于编译器。

您可以使用bash工具“定位”来搜索库中已知的任何文件。例如。对我来说,“找到stl_multimap.h”会产生:

/usr/include/c++/5/bits/stl_multimap.h
/usr/include/c++/6/bits/stl_multimap.h
/usr/include/c++/7/bits/stl_multimap.h
/usr/include/c++/8/bits/stl_multimap.h
/usr/lib/gcc-snapshot/include/c++/9/bits/stl_multimap.h

一旦您查看了目录,其他地方也应该很明显。

在这些位置的每个位置,我都会找到文件的不同编译器版本。对于我的计算机,所有gcc 7. *文件都位于我的/usr/include/c++/7目录中。

如果出于某些可怕的原因使用Windows,我相信您将能够在Powershell中找到等效的命令。