如何在 macOS 上找到 C 头文件 errno.h 的位置?
How to find location of C header file errno.h on macOS?
我是 C 语言的新手,正在尝试查看头文件的源代码 errno.h
。
我怎样才能:
- 找出头文件在我的计算机上的存储位置?
- 查看头文件的来源?
我试过的
我的 $HOME
目录中的 this answer、运行 gcc --print-file-name=errno.h
只输出 errno.h
.
从 this answer、运行 cpp -dM /usr/include/errno.h | grep 'define E' | sort -n -k 3
输出:
clang: error: no such file or directory: '/usr/include/errno.h'
clang: error: no input files
从 、运行 clang -E /usr/include/errno.h
输出:
clang: error: no such file or directory: '/usr/include/errno.h'
clang: error: no input files
我知道一个有效的解决方案是 运行 sudo find / -name "errno*.h" -type f
。然而,这个 returns many 结果。我想知道是否有一些编程方式可以使用与 C 相关的工具来查找源代码(例如,通过调用 gcc
)。
我的电脑
- macOS 版本:10.15.7 (Catalina)
clang --version
--> Apple clang version 12.0.0 (clang-1200.0.32.27)
不完全清楚你想在这里做什么 - 因为 <errno.h>
是一个标准库 header,你会在:/usr/include/errno.h
中找到它
...编辑 - 我现在可以看到您与 Catalina 的问题。见下文:
至少在我的(较旧的)OSX 盒子上,这个 header 不是很有用 - 反过来包括 <sys/errno.h>
,它至少提供了符号常量:EPERM, ENOENT, ...
(请参阅:man intro
了解概述)
由于 <sys/errno.h>
本身包含更多系统 header,尽管 header 很少涉及 user-space 开发,您可以大致了解编译器如何递归查找这些 headers 使用预处理阶段:
clang -E /usr/include/errno.h
- 这也适用于 gcc
。
对于 Catalina,header 现在位于 SDK 下。我确定这是有原因的——多个 SDK(例如 iphone 开发等),以及一些 post-hoc 安全理由阻止创建 /usr/include
目录。无论如何,对于 Catalina,您需要 Xcode 工具:xcrun
(请参阅:man xcrun
)以找到指向:.../usr/include
的 SDK 路径
`xcrun --show-sdk-path`/usr/include
提供路径,所以要查看<errno.h>
:
less `xcrun --show-sdk-path`/usr/include/errno.h
因此,您可以 运行 预处理器:
clang -E `xcrun --show-sdk-path`/usr/include/errno.h
我是 C 语言的新手,正在尝试查看头文件的源代码 errno.h
。
我怎样才能:
- 找出头文件在我的计算机上的存储位置?
- 查看头文件的来源?
我试过的
我的 $HOME
目录中的 this answer、运行 gcc --print-file-name=errno.h
只输出 errno.h
.
从 this answer、运行 cpp -dM /usr/include/errno.h | grep 'define E' | sort -n -k 3
输出:
clang: error: no such file or directory: '/usr/include/errno.h'
clang: error: no input files
从 clang -E /usr/include/errno.h
输出:
clang: error: no such file or directory: '/usr/include/errno.h'
clang: error: no input files
我知道一个有效的解决方案是 运行 sudo find / -name "errno*.h" -type f
。然而,这个 returns many 结果。我想知道是否有一些编程方式可以使用与 C 相关的工具来查找源代码(例如,通过调用 gcc
)。
我的电脑
- macOS 版本:10.15.7 (Catalina)
clang --version
-->Apple clang version 12.0.0 (clang-1200.0.32.27)
不完全清楚你想在这里做什么 - 因为 <errno.h>
是一个标准库 header,你会在:/usr/include/errno.h
中找到它
...编辑 - 我现在可以看到您与 Catalina 的问题。见下文:
至少在我的(较旧的)OSX 盒子上,这个 header 不是很有用 - 反过来包括 <sys/errno.h>
,它至少提供了符号常量:EPERM, ENOENT, ...
(请参阅:man intro
了解概述)
由于 <sys/errno.h>
本身包含更多系统 header,尽管 header 很少涉及 user-space 开发,您可以大致了解编译器如何递归查找这些 headers 使用预处理阶段:
clang -E /usr/include/errno.h
- 这也适用于 gcc
。
对于 Catalina,header 现在位于 SDK 下。我确定这是有原因的——多个 SDK(例如 iphone 开发等),以及一些 post-hoc 安全理由阻止创建 /usr/include
目录。无论如何,对于 Catalina,您需要 Xcode 工具:xcrun
(请参阅:man xcrun
)以找到指向:.../usr/include
`xcrun --show-sdk-path`/usr/include
提供路径,所以要查看<errno.h>
:
less `xcrun --show-sdk-path`/usr/include/errno.h
因此,您可以 运行 预处理器:
clang -E `xcrun --show-sdk-path`/usr/include/errno.h