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