【问题标题】:Cannot find stdio.h找不到 stdio.h
【发布时间】:2019-01-16 14:22:43
【问题描述】:

我正在使用 macOS。

我正在尝试构建 mozilla-central 的代码。

在运行命令./mach build 时,构建在编译步骤失败。以下是相关的堆栈跟踪:

stack backtrace:
 0:20.24    0:        0x10436b5ff - std::sys::unix::backtrace::tracing::imp::unwind_backtrace::hed04c7a1477ef1e3
 0:20.24    1:        0x10434499d - std::sys_common::backtrace::print::h336400f22676933f
 0:20.24    2:        0x104373bd3 - std::panicking::default_hook::{{closure}}::h0d6700a02d682978
 0:20.24    3:        0x10437395c - std::panicking::default_hook::h90363c6d6ac04260
 0:20.24    4:        0x1043742fb - std::panicking::rust_panic_with_hook::h81c4f3add25e6667
 0:20.24    5:        0x1043740ce - std::panicking::continue_panic_fmt::hfa057b7c1de88179
 0:20.24    6:        0x104374020 - std::panicking::begin_panic_fmt::hd1123702300ea9f2
 0:20.24    7:        0x1035f4e6d - build_script_build::build_gecko::bindings::write_binding_file::h2d9a397b93e6a614
 0:20.24    8:        0x1035f651c - build_script_build::build_gecko::bindings::generate_bindings::ha066bc11b076e01d
 0:20.24    9:        0x1043808fe - __rust_maybe_catch_panic
 0:20.24   10:        0x1035eea9f - std::panicking::try::hcbd901ede6e8004c
 0:20.32   11:        0x1035e335c - <F as alloc::boxed::FnBox<A>>::call_box::h638a7c5eb8c94414
 0:20.33   12:        0x104373037 - std::sys_common::thread::start_thread::h78b1dd404be976ad
 0:20.33   13:        0x1043436c8 - std::sys::unix::thread::Thread::new::thread_start::h27c6becca8cf44e0
 0:20.33   14:     0x7fff636208cc - _pthread_body
 0:20.33   15:     0x7fff6362083e - _pthread_start
 0:20.33 /usr/local/Cellar/llvm/6.0.1/include/c++/v1/stdio.h:108:15: fatal error: 'stdio.h' file not found
 0:20.33 /usr/local/Cellar/llvm/6.0.1/include/c++/v1/stdio.h:108:15: fatal error: 'stdio.h' file not found, err: true
 0:20.37 thread '<unnamed>' panicked at 'Failed to generate bindings

在我看来,根本原因是:

/usr/local/Cellar/llvm/6.0.1/include/c++/v1/stdio.h:108:15: fatal error: 'stdio.h' file not found, err: true

网上列出的解决方案是使用以下方式安装 xcode 命令行工具:

xcode-select --install

我已经这样做了。

【问题讨论】:

    标签: macos


    【解决方案1】:

    根本原因是缺少/usr/include 目录。

    安装命令行工具 (xcode-select --install) 有时不会自动添加它。

    Link 显示正确方法: 安装命令行工具后 安装包:

    # run this in Terminal
    open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
    

    之后,

    你应该有一个带有头文件的目录/usr/include

    【讨论】:

    • 请注意,/usr/include 已被弃用,最终会消失。
    • 这是对我有用的唯一解决方案。 Apple 如何无法在其旗舰开发环境中正确实现基本的工具链(并且十多年来一直无法做到)令人震惊。谢谢。
    • @Qix 是那些需要修复其源代码的应用程序作者。 Apple 明确表示已弃用。
    • @FranklinYu 到底弃用了什么?默认系统路径应在全新安装时正确设置。这里没有任何借口。
    • @Qix-MONICAWASMISTREATED 取决于 /usr/include 中的库已弃用。应用程序作者不应该在那里假设任何东西。你所说的“正确”是什么意思?您的意思是“与 Linux 相同”吗?我可能错了,但我不记得 POSIX 定义了库应该在哪里。 Linux 有 FHS。
    【解决方案2】:

    尝试将SDKROOT明确设置为系统SDK:

    export SDKROOT=$(xcrun --sdk macosx --show-sdk-path)
    

    这样做可以避免在/usr 中创建符号链接。

    此错误似乎经常出现,例如,如果您安装了另一个编译器(例如来自 brew 的 gcc)。设置SDKROOT 变得如此普遍,将其添加到~/.bash_profile 可能是个好主意。

    【讨论】:

    • SDKROOT 还是SDK_ROOT?最好保持一致。
    • 谢谢。通过 xcode 的整个工具链是疯狂的。
    • 这也解决了升级到 Catalina 后的一个问题,几乎所有与 xcode-select 工具链相关的东西都搞砸了。谢谢!
    • 这为我修好了!添加到我的外壳配置:)
    【解决方案3】:

    我在编译 R 包时遇到了同样的问题,运行 xcode-select --installmacOS_SDK_headers_for_macOS_10.14.pkg 并没有解决问题。

    我发现苹果方面在 macOS 10.14 和 10.15 之间似乎存在一些混淆,因为我使用最新的 xcode 11.0 (11A420a) 运行 Mojave (10.14),并且当 clang 编译时它会查找 MacOSX10.14 .sdk sysroot 目录在

    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/

    但只有 MacOSX10.15.sdk 存在(以及其他东西)。我用

    解决了这个问题

    pushd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ sudo ln -s MacOSX.sdk MacOSX10.14.sdk popd

    现在我可以再次在 RStudio 中安装包了。

    【讨论】:

      【解决方案4】:

      这是对 Rick Li 的评论。太长了,放不下评论区。

      Rick Li 提供的解决方案不一定是正确的方式。这只是最简单的方法。根据Xcode 10 release note

      …如果您是此类软件的维护者,我们鼓励您更新您的项目以使用 SDK 或针对阻止您这样做的问题提交错误报告。作为解决方法,提供了一个额外的包,它将头文件安装到基本系统。 在未来的版本中,将不再提供此软件包。

      所以正确的方法是联系 Mozilla 团队,让他们的应用程序在没有 hack 的情况下无法构建。它最终会破裂。

      如果你不认真对待这件事,它会在未来咬你一口。我还记得苹果deprecated 32-bit application on macOS 10.13 (High Sierra)。现在他们在 macOS 10.15 (Catalina) 中正式禁用了它,我听说到处都有人在哭。对你的选择负责。

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题。尝试通过xcode-select --install 安装命令行工具,但对我来说没有成功。

        经过更多研究,我发现您可以在Apple官方开发者支持网站(Link)上下载命令行工具

        搜索命令并下载第一个建议。 运行 .dmg 文件,看看是否有效。

        对我来说效果很好!

        【讨论】:

        • 这并不能真正回答问题。如果您有其他问题,可以点击 提问。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review
        • 为什么不回答这个问题。之后找到 stdio.h 库
        【解决方案6】:

        添加 -isysroot 和所需的 MacOSX 版本 它对我有用:MacOS Big Sure 11.4 和 XCode 12.5.1

        通过命令了解最新MacOS SDK版本路径:

        xcrun --sdk macosx --show-sdk-path
        

        将路径结果添加到-isysroot:

        -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk
        

        UPD:如果上述解决方案没有帮助,请尝试将 -I 包含在 MacOS SDK 中

         -I$(MACOSSDK)/usr/include\
         -I$(MACOSSDK)/usr/include/c++\
         -I$(MACOSSDK)/usr/include/c++/v1\
         -I$(MACOSSDK)/usr/include/c++/v1/ext\
        
         -Wnonportable-include-path
        

        【讨论】:

        • 添加到哪里?
        • @Clintm 将其添加到您的构建文件中,或配置您的 SDKROOT
        【解决方案7】:

        我在编译自己的项目时(突然)遇到了同样的问题 - 找不到 &lt;stdio.h&gt;&lt;wchar.h&gt;

        xcode-select --install

        xcode-select: error: command line tools are already installed, use "Software Update" to install updates
        

        以下步骤对我有用:

        1. 打开 Xcode 一次并允许它安装必要的组件
        2. 删除 CMake 缓存文件并重试 cmake 并构建

        我使用的是 macOS Big Sur 11.2.3 和 Xcode 版本 12.5。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-06-13
          • 1970-01-01
          • 1970-01-01
          • 2016-10-07
          • 2020-07-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多