升级到Mojave后无法在Mac上编译C程序

问题描述 投票:98回答:8

我在终端上使用了gcc命令来编译C程序但突然间,在我的Mac操作系统更新后(到macOS 10.14 Mojave和XCode 10.0),我开始收到消息:

test.c:8:10: fatal error: stdio.h: No such file or directory
#include <stdio.h>
         ^~~~~~~~~
compilation terminated.

我已经安装了gcc,因为我可以在/usr/local/bin找到它,那里确实有一个gcc。我尝试在我的其他iMac上运行相同的文件,它没有任何问题。

我试过运行xcode-select --install它已经安装了,因此它没有解决我现在遇到的问题。我猜测路径搞砸了,因为在我开始复制并粘贴其他资源中的一些命令来解决此问题后,它似乎无法找到gcc

希望对此有所帮助。

c macos gcc terminal
8个回答
189
投票

TL; DR

确保已下载最新的“命令行工具”软件包并从终端(命令行)运行:

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

从相当广泛的评论中提取半连贯的答案......

Preamble

很多时候,xcode-select --install一直是正确的解决方案,但这次似乎没有帮助。您是否尝试过运行主Xcode GUI界面?它可能会为您安装一些额外的软件并进行清理。我在安装Xcode 10.0后做了这件事,但是在升级到Mojave之前一周或更长时间。

我观察到如果你的GCC安装在/usr/local/bin中,你可能没有使用Xcode的GCC;这通常安装在/usr/bin

我也更新到macOS 10.14 Mojave和Xcode 10.0。然而,系统/usr/bin/gcc和系统/usr/bin/clang都适合我(Apple LLVM version 10.0.0 (clang-1000.11.45.2) Target: x86_64-apple-darwin18.0.0两个。)我有一个问题,我的自制GCC 8.2.0没有在/usr/include找到标题,这与你的/usr/local/bin/gcc没有找到标题的问题平行。

我做了一些比较,我的Mojave机器根本没有/usr/include,但/usr/bin/clang能够编译好。标题(_stdio.h,带有前导下划线)在我的旧/usr/include中;它现在缺失了(因此我的GCC 8.2.0问题)。我跑了xcode-select --install,它说“xcode-select: note: install requested for command line developer tools”,然后运行了一个GUI安装程序,它向我展示了我同意的许可证,并下载并安装了命令行工具 - 或者它声称。

然后我运行Xcode GUI(命令空间,Xcode,返回),它说它需要安装更多的软件,但仍然没有/usr/include。但我可以用/usr/bin/clang/usr/bin/gcc编译 - 而-v选项表明他们正在使用

InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

Working solution

然后Maxxx noted

我找到了办法。如果我们使用的是Xcode 10,您会注意到如果您导航到Finder中的/usr,您将不会再看到名为“include”的文件夹,这就是为什么终端会抱怨没有包含的头文件在'include'文件夹中。在Xcode 10.0 Release Notes,它说有一个包:

/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg 

你应该安装该软件包以安装/usr/include文件夹。然后你应该好好去。

当所有其他方法都失败时,请阅读手册,或者在本例中阅读发行说明。我发现Apple希望拒绝他们的Unix传统,我并不会感到非常惊讶,但我很失望。如果他们小心,他们可能会把我赶走。感谢您的信息。

在命令行使用以下命令安装了软件包后,我再次使用/usr/include,我的GCC 8.2.0再次运行。

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Downloading Command Line Tools

正如Vesal在一个有价值的comment中指出的那样,你需要在Mojave 10.14上下载Xcode 10.1的命令行工具包,你可以这样做:

您需要使用Apple ID登录才能获得下载。完成下载后,安装命令行工具包。然后按照“工作解决方案”一节中的说明安装标头。

这在Mojave 10.14.1上对我有用。我之前一定已经下载了这个,但是当我回答这个问题时我已经忘记了。

Upgrade to Mojave 10.14.4 and XCode 10.2

我已更新到Mojave 10.14.4,并且还升级了XCode 10.2命令行工具(或者XCode 10.1命令行工具已升级到10.2)。上面显示的open命令修复了丢失的标题。将主XCode升级到10.2然后重新重新安装命令行工具和头文件包可能仍然存在冒险。


17
投票

在尝试了我在这里和网上找到的每个答案之后,我仍然会收到一些丢失标题的错误。在尝试编译pyRFR时,我收到的stdexcept未找到错误,显然没有在/usr/include中安装其他标头。但是,我发现它隐藏在Mojave中的位置并将其添加到我的~/.bash_profile文件的末尾:

export CPATH=/Library/Developer/CommandLineTools/usr/include/c++/v1

完成后,我现在可以编译pyRFR和其他C / C ++程序。根据echo | gcc -E -Wp,-v -的说法,gcc在旧位置查找这些标题(没有/c++/v1),但不是新位置,所以将其添加到CFLAGS修复它。


6
投票

问题是Xcode,尤其是Xcode 10.x,没有安装所有东西,所以确保安装了命令行工具,在终端shell中输入:

xcode-select --install

还启动XCode并确保安装了所有必需的安装(如果不安装,则会收到提示。)由于XCode 10没有安装完整的Mac OS SDK,请运行安装程序

/library/developer/command line tools/packages/MA cos_SDK_headers_佛如_MA cos_10.14.pkg

因为XCode 10没有安装此软件包。


3
投票

请务必检查Xcode首选项 - >位置。

我选择的命令行工具是针对之前版本的Xcode(8.2.1而不是10.1)


2
投票

有类似OP的问题

Issue

猫你好

#include <stdlib.h>
int main() { exit(0); }

clang hello.c

/usr/local/include/stdint.h:2:10: error: #include nested too deeply
etc...

Attempted fix

我安装了最新版本的XCode,然而,发行说明表明,Jonathan在上一个修复程序中提到的文件已不再可用。

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

详情请参阅https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes,新功能部分。


Solution that worked for me...

使用此评论中的详细信息,https://github.com/SOHU-Co/kafka-node/issues/881#issuecomment-396197724

我发现brew doctor报告我在/usr/local/文件夹中有未使用的包含。

所以要修复,我使用用户HowCrazy提供的命令来查找未使用的包含并将它们移动到临时文件夹。

在这里重复......

mkdir /tmp/includes
brew doctor 2>&1 | grep "/usr/local/include" | awk '{$1=$1;print}' | xargs -I _ mv _ /tmp/includes

运行脚本后,包含文件问题就消失了。 nb:我也对here这个问题发表了评论。


2
投票

我在这个GitHub comment找到了很好的解决方案和解释。诀窍:

make SDKROOT=`xcrun --show-sdk-path` MACOSX_DEPLOYMENT_TARGET=

做完了。


1
投票

我遇到了这个问题但没有任何效果。我跑了xcode-select --install并且还安装了/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

背景

由于我在新笔记本电脑上遇到App Store问题,我被迫从Apple网站下载XCode Beta安装程序,在App Store外部安装XCode。所以我只安装了XCode Beta。

这,(我认为),是让clang找不到SDKROOT目录/Applications/Xcode.app/....,因为路径中没有Beta,或者XCode Beta可能根本就没有安装它(我不知道)。要解决此问题,我必须删除XCode Beta并解决App Store问题以安装发行版。

tldr;

如果您有XCode Beta,请尝试清理所有内容并安装发行版,然后再尝试为其他人工作的解决方案。


-1
投票

正如Jonathan Leffler上面指出的那样,Xcode 10.1中的macOS_SDK_headers.pkg文件不再存在。

对我有用的是做brew upgrade和gcc的更新和/或其他任何自制软件在幕后做了解决路径问题。

© www.soinside.com 2019 - 2024. All rights reserved.