c - 如何在 macOS 上找到 C 头文件 errno.h 的位置?

标签 c macos header-files macos-catalina errno

我是 C 语言新手,正在尝试查看头文件的源代码 errno.h .
我怎样才能:

  • 弄清楚头文件在我的电脑上的存储位置?
  • 查看头文件的来源?

  • 我试过的
    来自 this answer , 正在运行 gcc --print-file-name=errno.h在我的 $HOME目录只输出 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
    
    来自 this answer , 正在运行 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 .但是,这会返回 许多 结果。我想知道是否有一些编程方式可以使用 C 相关工具(例如通过调用 gcc )来查找源代码。
    我的电脑
  • macOS 版本:10.15.7 (Catalina)
  • clang --version --> Apple clang version 12.0.0 (clang-1200.0.32.27)
  • 最佳答案

    不完全清楚你在这里想做什么 - 因为 <errno.h>是一个标准库头文件,你可以在:/usr/include/errno.h 中找到它
    ... 编辑 - 我现在可以看到您与 Catalina 的问题。见下文:
    至少在我的(较旧的)OSX 机器上,这个标题的信息量不是很大 - 包括 <sys/errno.h>反过来,它至少提供了符号常量:EPERM, ENOENT, ... (参见:man intro 概览)
    <sys/errno.h>本身包括更多的系统头文件,尽管这些头文件很少涉及用户空间开发,但您可以大致了解编译器如何使用预处理阶段递归地找到这些头文件:clang -E /usr/include/errno.h - 这适用于 gcc也。

    对于 卡特琳娜 , header 现在位于 SDK 下。我确信这是有原因的 - 多个 SDK(例如,iphone 开发等),以及一些防止创建 /usr/include 的安全性的事后理由。目录。无论如何,对于 Catalina,你需要 Xcode 工具:xcrun (参见: man xcrun )找到 SDK 路径: .../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
    

    关于c - 如何在 macOS 上找到 C 头文件 errno.h 的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65866733/

    相关文章:

    python - 如何在没有系统特定的情况下获得 pathlib 的 unix 路径处理好东西,例如 Path.resolve() changes/tmp to/private/tmp

    clang 不编译 c 程序?

    c++ - 在单头文件、静态库和共享库之间链接 boost 库的哪种用法变体更好?

    c - 如何计算 open() 中 oflag 的位标志/枚举标志?

    c - 如何在两个目录之间剪切、粘贴或移动文件?

    不使用 libelf 或其他库创建 ELF 二进制文件

    java - 为什么opennlp库的HelloWorld在Java上工作正常,但在Jruby上却不工作?

    swift - 快速按下按钮时使用 slider

    c++ - 包含的 C++/C 头文件的实现在哪里?

    c - 我的堆栈实现中的数据泄漏