簡體   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