繁体   English   中英

C++标准库的头文件在哪里

[英]Where are the headers of the C++ standard library

我想知道在我的文件系统上哪里可以找到 C++ 标准库的标头。 特别是我正在寻找矢量模板的定义。 我在 /usr/include/ 和各种子目录中搜索。 我还尝试了“locate vector.h”,它提出了许多矢量的实现,但不是标准的。 我错过了什么? (发行版是 Gentoo)

背景:我正在分析一个大部分时间迭代 vector 的库,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 内部发生的情况,但我不确定。

GCC 通常在/usr/include/c++/<version>/中安装了标准的 C++ 头文件。 您可以运行gcc -v来查看您安装的是哪个版本。

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

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

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

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

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

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

libstdc++-版本-dev

获取头文件。

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

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

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

您可以使用 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 等效的命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM