37

我想知道在我的文件系统上哪里可以找到 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 内部发生的情况,但我不确定。

4

6 回答 6

43

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

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

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

于 2012-07-12T18:00:17.153 回答
12

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

于 2012-07-12T18:02:23.353 回答
2

在我的 Debian Stable 系统vector上:

/usr/include/c++/4.4/vector
于 2012-07-12T17:56:03.940 回答
1

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

libstdc++-版本-dev

获取头文件。

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

于 2013-08-23T14:18:54.827 回答
0

在许多 IDE(例如 NetBeans)中,您可以使用Ctrl+ClickclassName 去定义

于 2012-07-12T17:54:48.107 回答
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 等效的命令。

于 2019-12-13T08:02:29.523 回答