我一直在浏览我的 /usr/include 文件夹,试图熟悉布局,我注意到头文件有多个副本(至少按名称,我实际上并没有区分它们以查看它们是否准确副本)在 /usr/include 的几个子目录中找到。对于标准 C 和 C++ 头文件以及 POSIX/LSB 标准头文件尤其如此。
一些示例包括(注意 ./ 指的是 /usr/include):
./asm-generic/unistd.h
./linux/unistd.h
./unistd.h
./x86_64-linux-gnu/sys/unistd.h
./x86_64-linux-gnu/bits/unistd.h
./x86_64-linux-gnu/asm/unistd.h
./stdlib.h
./x86_64-linux-gnu/bits/stdlib.h
./c++/7/stdlib.h
./c++/7/tr1/stdlib.h
./c++/7/cmath
./c++/7/ext/cmath
./c++/7/tr1/cmath
./asm-generic/termios.h
./linux/termios.h
./x86_64-linux-gnu/sys/termios.h
./x86_64-linux-gnu/bits/termios.h
./x86_64-linux-gnu/asm/termios.h
./termios.h
./linux/time.h
./time.h
./x86_64-linux-gnu/sys/time.h
./x86_64-linux-gnu/bits/time.h
Run Code Online (Sandbox Code Playgroud)
为什么是这样?为什么某些 C 标准头文件会出现在 C++ 位置?
我只安装了一个编译器(GCC 7)。
bash shell 中确定用于编译当前运行的内核的 GCC 版本的可靠方法是什么?我需要它的形式,major.minor.patch
以便我可以将它与输出中第一行的最后一个标记进行比较gcc --version
。
我一直在/proc/version
使用以下内容进行解析:
awk '{print $8}' /proc/version | tr -d ','
Run Code Online (Sandbox Code Playgroud)
但是,我正在查找的版本字符串并不总是出现在/proc/version
. 有更稳健的方法吗?一个仅适用于 Ubuntu 的强大解决方案就足够了,如果更困难的话,无需使其独立于发行版。