找不到stdio.h

时间:2018-08-09 07:53:49

标签: macos

我正在使用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

我已经做到了。

7 个答案:

答案 0 :(得分:30)

根本原因是由于缺少/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

答案 1 :(得分:15)

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

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

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

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

答案 2 :(得分: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中安装软件包了。

答案 3 :(得分:1)

我有同样的问题。试图通过xcode-select --install安装命令行工具,但对我来说没有用。

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

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

对我很有帮助!

答案 4 :(得分:0)

这是对Rick Li的评论。太长了,无法放入评论区域。

李克(Rick Li)提供的解决方案不是正确方式所必需的。这只是最简单的方式。根据{{​​3}}:

  

...如果您是此类软件的维护者,我们建议您更新项目以使其与SDK配合使用,或者针对导致您无法执行此操作的问题提交错误报告。作为解决方法,提供了一个额外的程序包,该程序包会将标头安装到基本系统。 在将来的版本中,将不再提供此软件包。

因此,正确的方法是与Mozilla团队联系,以确保他们的应用程序必须经过黑客入侵才能构建。最终会破裂。

如果您不重视这一点,将来会给您带来痛苦。我仍然记得苹果Xcode 10 release note。现在他们正式在macOS 10.15(Catalina)中禁用了它,我听说到处有人在哭泣。对您的选择负责。

答案 5 :(得分:0)

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

运行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 版。

答案 6 :(得分:0)

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

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