通过macOS终端编译,致命错误:stdio.h:没有那个文件或目录。

5
尝试编译C文件(通过makefile),但出现“fatal error: stdio.h: No such file or directory”的错误。在cygwin和远程linux服务器上可以正常编译(因此文件没有问题),但在我的mac上无法编译。我已经按照this问题中提到的方法安装了mac命令行工具。当我执行gcc --version时,得到的版本是5.3,但如果我执行brew info gcc,则得到的版本是8.2。通过终端查找文件时可以找到该文件,所以不确定出了什么问题。

你需要考虑一下你的程序是C还是C++,因为你似乎在每一步都混淆了这两个。对于C++程序,请使用g++并标记为C++。对于C程序,请使用gcc并标记为C。可以参考这里... https://dev59.com/81wY5IYBdhLWcg3wq5bl#32338889 - Mark Setchell
马克,你说得对,我使用了不正确的术语,我的错。然而,这仍然没有解决潜在的问题。我构建的Makefile在我的PC和远程Linux服务器上通过Cygwin工作得很好(并且使用gcc作为c而不是c++程序)。但是,在我的Mac上运行makefile时,我遇到了我提到的错误,所以这与我的gcc安装/版本/?和我的Mac有关。 - ChrisS
4个回答

2
如果你运行:
which gcc

您将获得/usr/bin/gcc,这是苹果macOS提供的编译器。

假设您提到homebrew,那么您想使用由homebrew安装的编译器。因此,您需要查看/usr/local/bin并查看homebrew安装了什么:

ls -l /usr/local/bin/gcc*
lrwxr-xr-x  1 mark  admin  29 17 Sep 10:53 /usr/local/bin/gcc-8 -> ../Cellar/gcc/8.2.0/bin/gcc-8

所以,回答你的问题:

  • 首先,你需要将/usr/local/bin放在你的PATH环境变量的开头,
  • 其次,你需要使用以下命令进行编译:

gcc-8 main.c -o main


0

正如我在原帖中提到的,我已经尝试过了,但并没有解决问题。文件没问题,代码可以在我的电脑和远程Linux上编译和运行。唯一的问题是在我的Mac上编译。 - ChrisS

0
使用 Mojave 和 XCODE 10,问题在于安装命令行工具时不再自动包含 "include" 文件夹。相反,您需要对 /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg 执行 "打开" 操作。无论如何,这解决了我的同样的问题。

0

我遇到了这个问题,这是我解决的方法。

softwareupdate --all --install --force
sudo rm -rf /Library/Developer/CommandLineTools
sudo xcode-select --install

基本上开发者框架可能会出现问题。但是仅仅运行xcode-select --install可能不起作用,因为它会说xcode开发工具已经安装(尽管它已经损坏)。所以我不得不完全清除任何现有的安装,并重新安装开发者框架。

顺便说一下,如果一切都正确安装,头文件应该在以下位置找到:

 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接