[英]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.