查看ubuntu系统中g++ 编译时默认的标准系统目录中的头文件

在 Ubuntu 系统中,g++ 编译器在编译时会使用一系列默认的系统目录来查找头文件。这些目录通常包括 C++ 标准库、标准头文件以及其他一些系统库的路径。具体的路径可能会有所不同,取决于你的 g++ 版本和安装配置,但常见的系统目录包括:

常见的默认系统头文件目录
C++ 标准库头文件:

/usr/include/c++//:这是 C++ 标准库的主要目录, 表示你的编译器版本号,例如 9, 10, 11 等。
示例:/usr/include/c++/11/
/usr/include/x86_64-linux-gnu/c++//:这是 C++ 标准库在 64 位系统上的架构特定目录。
示例:/usr/include/x86_64-linux-gnu/c++/11/
标准头文件:

/usr/include/:包含 C 标准库的头文件,如 stdio.h, stdlib.h, string.h 等。
/usr/include/x86_64-linux-gnu/:某些系统库的特定架构目录,如 features.h 和其他与平台相关的头文件。
其他系统库目录:

/usr/local/include/:通常用于安装在 /usr/local 目录下的第三方库的头文件。
查看实际的头文件搜索路径
你可以通过运行 g++ -v 来查看实际的头文件搜索路径。在输出中,编译器会显示它查找头文件的路径。例如:

g++ -v -x c++ -E /dev/null

这个命令会生成编译器的详细信息,包括所有默认的头文件搜索路径。你会看到类似下面的输出部分:

#include <...> search starts here:
 /usr/include/c++/11
 /usr/include/x86_64-linux-gnu/c++/11
 /usr/include/c++/11/backward
 /usr/local/include
 /usr/include
...

这些路径展示了编译器在编译过程中查找头文件的顺序。

下面详细解释g++ -v -x c++ -E /dev/null命令

g++ -v -x c++ -E /dev/null 是一个用来查看 g++ 编译器的详细信息,特别是有关头文件搜索路径的命令。下面是对每个选项的详细解释:

命令拆解
g++:

这是 GNU C++ 编译器的命令,用于编译 C++ 程序。
-v:

这是“verbose”选项,表示启用详细输出。使用这个选项后,g++ 会输出更多的诊断信息,包括编译器的内部过程和使用的配置细节。
-x c++:

这个选项用于指定输入文件的语言类型。在这里,c++ 指定输入文件是 C++ 代码。虽然在这个例子中输入文件是 /dev/null,但 -x 选项仍然告诉编译器按照 C++ 语言的规则进行处理。
-E:

这个选项告诉编译器仅执行预处理阶段(preprocessing)。预处理阶段包括处理 #include、#define 等指令,而不会进行实际的编译。预处理的输出通常是展开的宏和包含的头文件。
/dev/null:

这是一个特殊的设备文件,表示“空设备”。任何写入 /dev/null 的数据都会被丢弃。在这个命令中,它作为一个虚拟输入文件传递给 g++,实际上不会对命令的输出产生任何影响。它仅用于触发编译器的头文件搜索路径输出。
总结
运行 g++ -v -x c++ -E /dev/null 会让 g++ 进入详细模式,并在预处理阶段显示它用来查找头文件的所有目录。这通常用于调试或检查编译器的头文件搜索路径配置。输出的结果中包含了编译器查找头文件的顺序和具体路径,有助于了解编译器在编译过程中如何解析 #include 指令。

在自己电脑上运行 g++ -v -x c++ -E /dev/null输出

Using built-in specs.
COLLECT_GCC=g++
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) 
COLLECT_GCC_OPTIONS='-v' '-E' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-linux-gnu/11/cc1plus -E -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /dev/null -mtune=generic -march=x86-64 -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -dumpbase null
ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/11"
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/11
 /usr/include/x86_64-linux-gnu/c++/11
 /usr/include/c++/11/backward
 /usr/lib/gcc/x86_64-linux-gnu/11/include
 /usr/local/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
# 0 "/dev/null"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 0 "<command-line>" 2
# 1 "/dev/null"
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/home/liangjiabao/nvidia/TensorRT-8.5.1.7/lib/../lib/:/home/liangjiabao/nvidia/TensorRT-8.5.1.7/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/home/liangjiabao/nvidia/TensorRT-8.5.1.7/lib/:/home/liangjiabao/nvidia/TensorRT-8.5.1.7/lib/:./:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-E' '-shared-libgcc' '-mtune=generic' '-march=x86-64'

解释:这是 g++ -v -x c++ -E /dev/null 命令的详细输出,提供了关于编译器配置和头文件搜索路径的详细信息。下面是每部分的解释:

编译器配置
Using built-in specs.

表示 g++ 使用内置的默认规格配置文件。这些规格文件定义了编译器如何处理各种编译选项和行为。
COLLECT_GCC=g++

显示正在使用的编译器命令,这里是 g++。
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa

显示编译器支持的 offload 目标(例如 NVIDIA GPU 和 AMD GPU)。
OFFLOAD_TARGET_DEFAULT=1

表示 OFFLOAD_TARGET_NAMES 中列出的目标之一是默认的 offload 目标。
Target: x86_64-linux-gnu

表示编译器的目标架构和操作系统,这里是 x86_64 架构上的 Linux 操作系统。
Configured with:

列出编译器的配置选项。这些选项在编译 g++ 本身时使用,定义了编译器的功能和特性。
例如:–enable-languages=c,c++,ada,go 表示编译器支持 C、C++、Ada 和 Go 语言。
Thread model: posix

表示编译器使用 POSIX 线程模型,这是 Linux 系统上常见的线程模型。
Supported LTO compression algorithms: zlib zstd

列出编译器支持的 LTO(链接时间优化)压缩算法。
gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)

显示 g++ 的版本号和 Ubuntu 发行版的信息。
编译器选项和路径
COLLECT_GCC_OPTIONS=‘-v’ ‘-E’ ‘-shared-libgcc’ ‘-mtune=generic’ ‘-march=x86-64’

显示传递给 g++ 的选项:
-v:启用详细输出。
-E:仅执行预处理阶段。
-shared-libgcc:使用共享的 libgcc 库。
-mtune=generic:针对通用处理器优化代码。
-march=x86-64:生成适用于 x86-64 架构的代码。
/usr/lib/gcc/x86_64-linux-gnu/11/cc1plus -E -quiet -v -imultiarch x86_64-linux-gnu …

显示实际用于处理 C++ 源代码的内部命令。
cc1plus 是 C++ 的预处理器和编译器。
-E:仅执行预处理。
-quiet:抑制输出消息。
-v:启用详细输出。
头文件搜索路径
#include “…” search starts here:

这部分显示了编译器查找头文件的路径列表。
列出实际的头文件搜索路径,例如:
/usr/include/c++/11:C++ 标准库的头文件目录。
/usr/include/x86_64-linux-gnu/c++/11:针对 x86-64 架构的 C++ 标准库头文件目录。
/usr/include:系统头文件目录。
ignoring duplicate directory …

表示编译器忽略了某些重复或不存在的目录。
COMPILER_PATH=

显示编译器的搜索路径,这些路径用于查找编译器自身的工具和库。
LIBRARY_PATH=

显示库文件的搜索路径,用于查找链接时需要的库。
总结
此输出详细说明了 g++ 的配置选项、编译器路径和头文件搜索路径。它对于调试编译问题、了解编译器的配置以及确保编译器按预期工作非常有用。

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值