如何在macOS上查找C头文件errno.h的位置?
我是C语言新手,正在尝试查看头文件的源代码 我怎样才能:如何在macOS上查找C头文件errno.h的位置?,c,macos,header-files,macos-catalina,errno,C,Macos,Header Files,Macos Catalina,Errno,我是C语言新手,正在尝试查看头文件的源代码 我怎样才能: 找出头文件存储在我的计算机上的位置 是否查看头文件的源 我尝试过的 从,在我的$HOME目录中运行gcc--print file name=errno.h,只输出errno.h 从,运行cpp-dM/usr/include/errno.h | grep'define E E'| sort-n-k3输出: clang:error:没有这样的文件或目录:'/usr/include/errno.h' 叮当声:错误:没有输入文件 从,运行cla
$HOME
目录中运行gcc--print file name=errno.h
,只输出errno.h
从,运行cpp-dM/usr/include/errno.h | grep'define E E'| sort-n-k3
输出:
clang:error:没有这样的文件或目录:'/usr/include/errno.h'
叮当声:错误:没有输入文件
从,运行clang-E/usr/include/errno.h
输出:
clang:error:没有这样的文件或目录:'/usr/include/errno.h'
叮当声:错误:没有输入文件
我知道的一个解决方案是运行sudofind/-name“errno*.h”-type f
。但是,这将返回许多结果。我想知道是否有一些编程方法可以使用C相关工具(例如,通过调用gcc
)查找源代码
我的电脑
- macOS版本:10.15.7(Catalina)
-->clang--version
Apple clang版本12.0.0(clang-1200.0.32.27)
- 现在还不完全清楚您想在这里做什么-因为
是一个标准的库头,您可以在以下位置找到它:/usr/include/errno.h
。。。编辑-我现在可以看到你与Catalina之间的问题。见下文:
至少在我的(较旧的)OSX框中,这个标题不是很有用-依次包括
,它至少提供了符号常量:EPERM,enoint,
(有关概述,请参阅:man intro
)
由于
本身包含更多的系统头,尽管这些头很少涉及用户空间开发,您可以通过预处理阶段了解编译器如何递归查找这些头:
clang-E/usr/include/errno.h
-这也适用于gcc
对于Catalina,标题现在位于SDK下。我相信这是有原因的——多个SDK(例如iphone开发等),以及一些事后的安全理由阻止创建
/usr/include
目录。在任何情况下,对于Catalina,您都需要使用Xcode工具:xcrun
(请参阅:manxcrun
)来查找SDK路径:../usr/include
`xcrun --show-sdk-path`/usr/include
提供路径,以便查看
:
less `xcrun --show-sdk-path`/usr/include/errno.h
因此,您可以通过以下方式运行预处理器:
clang -E `xcrun --show-sdk-path`/usr/include/errno.h
这是很麻烦的,而且很多有自己构建系统的包都不会意识到这一需求。因此,有用的选项是在
~/.bashrc
-shell init文件在OSX上乱七八糟
export CPATH=`xcrun --show-sdk-path`/usr/include/
或者shell喜欢的任何语法。我推荐上面的方法,因为'sh'
(通常'bash'
)是基本的,其他shell继承变量。(尽管从Catalina开始,您可能应该关注zsh
init文件,因为它正在取代bash
。)
$CPATH
将受到clang和gcc的尊重-我不确定它在技术上是否是POSIX/BSD/ISO C标准(可能超出后者的范围);但实际上,它在各个平台上无处不在
因此,现在您可以只使用:减去$CPATH/errno.h
,或者将预处理器用作:
clang -E $CPATH/errno.h
头文件通常存储在/usr/include中。请注意,这不是一个库,而是一个包含文件。我不知道区别,谢谢@Rob。我已经用一个真正的编译器更新了这个问题,你可以使用
-H
option@BasileStarynkevitch-嗯。每天学习新的东西!感谢@BrettHale的响应,运行clang
命令返回错误:没有这样的文件或目录:'/usr/include/errno.h'
。有什么想法吗?@IntrastellarExplorer-对不起,卡塔琳娜的情况发生了变化,我已经更新了答案。你的答案很准确,谢谢@BrettHale的更新!:)。我现在能够弄清楚errno
是如何实现的。