我想知道我的文件系统在哪里找到了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内部发生的事情,但我不确定。
答案 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中找到等效的命令。