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


159

我已经在终端上使用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在我开始复制并粘贴来自其他资源的一些命令来解决此问题后似乎找不到该路径。

希望对此有所帮助。


5
您可以使用echo "#include <a.h>" | gcc -v -x c -
Matt Matt

2
通常,xocde-select --install是正确的解决方案。您升级到哪个操作系统?莫哈韦10.14?您安装了哪个XCode?10.0或其他版本?
乔纳森·莱夫勒

39
@JonathanLeffler我找到了一种方法。如果我们使用的是XCode 10,您会注意到,如果在Finder中导航到/ usr,您将再也看不到名为“ include”的文件夹,这就是为什么终端会抱怨缺少包含在其中的头文件的原因。 “包含”文件夹。在此发行声明中,developer.apple.com / documentation / xcode_release_notes /…(您导航至/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg并运行该程序包以安装“ include”文件夹)。那你应该很好。
Maxxx

1
如果所有其他方法均失败,请阅读手册!或发行说明。我对发现Apple愿意放弃Unix传统并不感到惊讶。我很失望。如果他们注意的话,他们可能会把我赶走。感谢您的信息; 稍后(闭眼几个小时),我将对其进行试验。
乔纳森·勒夫勒

16
安装了软件包(open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg在命令行中)后,我/usr/include又有了,我的GCC 8.2.0再次工作。感谢您的指导;找到它做得很好。我建议您写下答案,因为可能会有其他人遇到此问题。
乔纳森·莱夫勒18/09/26

Answers:


264

TL; DR

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

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

有关Catalina的某些信息,请参阅升级到Catalina 10.15后无法在Mac上编译C程序


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

前言

很多时候,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/clangand 进行编译/usr/bin/gcc-该-v选项表明他们正在使用

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

工作方案

然后Maxxx 指出

我找到了办法。如果我们使用的是Xcode 10,您会注意到,如果您/usr在Finder中导航到,则不会再看到一个名为“ include”的文件夹,这就是为什么终端会抱怨缺少包含在其中的头文件的原因“包含”文件夹。在Xcode 10.0发行说明中,它说有一个包装:

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

并且您应该安装该软件包以/usr/include安装文件夹。那你应该很好。

如果所有其他方法均失败,请阅读手册或本发行说明。我对发现苹果公司愿意放弃他们的Unix传统并不感到惊讶,但我感到失望。如果他们注意的话,他们可能会把我赶走。感谢您的信息。

在命令行中使用以下命令安装了软件包之后,我/usr/include又有了,我的GCC 8.2.0再次可以工作。

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

下载命令行工具

正如Vesal在一份有价值的评论中指出的那样,您需要在Mojave 10.14上下载Xcode 10.1的命令行工具包,并且可以从以下位置下载:

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

这在Mojave 10.14.1上为我工作。我以前必须已经下载了此文件,但是在回答这个问题时我已经忘记了。

升级到Mojave 10.14.4和Xcode 10.2

在2019-05-17左右,我更新到Mojave 10.14.4,并且Xcode 10.2命令行工具也已升级(或Xcode 10.1命令行工具已升级到10.2)。的open上面显示命令修复了丢失的标题。将主Xcode升级到10.2,然后重新安装命令行工具和头文件包,可能仍然会有冒险。

升级到Xcode 10.3(对于Mojave 10.14.6)

在2019-07-22,我通过App Store注意到可以升级到Xcode 10.3,并且其中包括适用于iOS 12.4,tvOS 12.4,watchOS 5.3和macOS Mojave 10.14.6的SDK。我将其安装在我的10.14.5机器中的一台上,然后运行它,并按照建议的方式安装了其他组件,并且它似乎/usr/include完好无损。

当天晚些时候,我发现macOS Mojave 10.14.6也可用(系统偏好设置⟶软件更新),以及命令行实用程序软件包IIRC(已自动下载并安装)。重新安装了o / s更新确实删除了/usr/include,但是open答案顶部的命令再次将其恢复。我在open命令文件中拥有的日期是2019-07-15。

升级到XCode 11.0(对于Catalina 10.15)

XCode 11.0的升级版(“包括适用于iOS 13,tvOS 13,watchOS 6和macOS Catalina 10.15的Swift 5.1和SDK”)于2019-09-21发布。我收到有关“可用更新”的通知,并通过App Store应用程序(“更新”选项卡)将其下载并安装到运行macOS Mojave 10.14.6的计算机上,而不会出现问题,也无需使用/usr/include。安装后(运行应用程序本身之前),我立即尝试重新编译,并被告知:

同意Xcode / iOS许可证需要管理员权限,请运行“ sudo xcodebuild -license”,然后重试此命令。

运行(sudo xcodebuild -license)使我可以运行编译器。从那时起,我运行该应用程序以安装所需的其他组件。还是没问题。当我升级到Catalina本身时会发生什么还有待观察-但是我的macOS Mojave 10.14.6机器目前都可以(2019-09-24)。


4
谢谢你写这个 非常感激。干杯!
Maxxx

6
为我解决了!!!非常感谢您抽出宝贵的时间编写本文!
budekatude

8
糟糕!!! 10.14.1更新使事情再次发生了变化,或者至少,它们似乎又发生了变化。对我来说,似乎o / s更新不见了/usr/include,上面答案中列出的软件包没有出现,/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgxcode-select --install说当前没有命令行工具。
乔纳森·莱夫勒

15
操苹果。他们不能只留下有用的东西,还必须移动东西,添加步骤并创造搅动。

7
为了希望搜索引擎能够找到答案,上述说明fatal error: bits/ctype_base.h: No such file or directory: #include <bits/ctype_base.h>为我解决了在Mojave上使用libstdc ++编译GCC 7.4.0时的问题
Adam Lindberg,

30

在尝试了所有可以在此处和在线找到的答案后,我仍然因某些缺少的标头而出错。尝试编译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可以修复该问题。


什么都没用,但是这个没用。非常感谢你!!
Felix

2
wickedsickbrothnx
Davis Dulin

23

当你

  • 更新为 Mojave 10.14.6
  • /usr/include再次被删除
  • @ Jonathan-lefflers 答案中提到的软件包已不存在, The file /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg does not exist.并且
  • Xcode抱怨命令行工具已经安装 xcode-select --install xcode-select: error: command line tools are already installed, use "Software Update" to install updates

然后,帮助我恢复上述软件包的原因是删除了整个CommandLineTools文件夹 (sudo) rm -rf /Library/Developer/CommandLineTools并重新安装xcode-select --install


优秀的!在执行完步骤之后,macOS_SDK_headers_for_macOS_10.14.pkg可以使用get命令,并且该命令执行open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg了应该执行的操作。太感谢了!!
布鲁诺·安布罗齐奥

3
对我来说,以下工作有效: export CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include
rbieber

谢谢!我被卡住了,这真的是为我工作与莫哈韦10.4.6和11.3.1的XCode
西蒙摹

每次Apple发布系统更新时,我都必须以不同的方式解决Clion的问题。
igonejack

12

问题是Xcode(尤其是Xcode 10.x)尚未安装所有内容,因此请确保已安装命令行工具,并在终端外壳中键入以下内容:

xcode-select-安装

还要启动Xcode并确保已安装所有必需的安装(如果未安装,则将得到提示。)并且由于Xcode 10未安装完整的Mac OS SDK,请在以下位置运行安装程序

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

因为Xcode 10未安装此软件包。


1
这救了我。非常感谢!
Demven Weir

7

我在GitHub评论中找到了很好的解决方案和解释。诀窍:

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

做好了


5

注意:在macOS Catalina 10.15的切换/一般可用性之前,以下内容可能在很大程度上取决于上下文和时间限制。新的笔记本电脑。我正在写2019年10月1日。

我认为,这些特定情况是造成我制造问题的原因。它们可能不适用于大多数其他情况。

内容:

  • macos 10.14.6 Mojave,Xcode 11.0,就在macos Catalina 10.15发布之前。新购买的Macbook Pro。

  • 失败pip install psycopg2,基本上是从源代码编译的Python包。

  • 我已经在此处给出的答案中进行了一些建议的调整。

我的错误:

pip install psycopg2
Collecting psycopg2
  Using cached https://files.pythonhosted.org/packages/5c/1c/6997288da181277a0c29bc39a5f9143ff20b8c99f2a7d059cfb55163e165/psycopg2-2.8.3.tar.gz
Installing collected packages: psycopg2
  Running setup.py install for psycopg2 ... error
    ERROR: Command errored out with exit status 1:
     command: xxxx/venv/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/bk/_1cwm6dj3h1c0ptrhvr2v7dc0000gs/T/pip-install-z0qca56g/psycopg2/setup.py'"'"'; __file__='"'"'/private/var/folders/bk/_1cwm6dj3h1c0ptrhvr2v7dc0000gs/T/pip-install-z0qca56g/psycopg2/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/bk/_1cwm6dj3h1c0ptrhvr2v7dc0000gs/T/pip-record-ef126d8d/install-record.txt --single-version-externally-managed --compile --install-headers xxx/venv/include/site/python3.6/psycopg2


...
/usr/bin/clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -pipe -Os -isysroot/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -DPSYCOPG_VERSION=2.8.3 (dt dec pq3 ext lo64) -DPG_VERSION_NUM=90615 -DHAVE_LO64=1 -I/Users/jluc/kds2/py2/venv/include -I/opt/local/Library/Frameworks/Python.framework/Versions/3.6/include/python3.6m -I. -I/opt/local/include/postgresql96 -I/opt/local/include/postgresql96/server -c psycopg/psycopgmodule.c -o build/temp.macosx-10.14-x86_64-3.6/psycopg/psycopgmodule.o

    clang: warning: no such sysroot directory: 
'/Applications/Xcode.app/Contents/Developer/Platforms
                              ❌👇the real error👇❌
/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk' [-Wmissing-sysroot]
    In file included from psycopg/psycopgmodule.c:27:
    In file included from ./psycopg/psycopg.h:34:
    /opt/local/Library/Frameworks/Python.framework/Versions/3.6/include/python3.6m/Python.h:25:10: fatal error: 'stdio.h' file not found
                             ❌👆 what I thought was the error 👆❌
    #include <stdio.h>
             ^~~~~~~~~
    1 error generated.

    It appears you are missing some prerequisite to build the package 

到目前为止,我所做的事情没有解决任何问题:

  • xcode-select --install
  • 安装的xcode
  • open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

在stdio.h上仍然是相同的错误。

它存在于许多地方:

(venv) jluc@bemyerp$ mdfind -name stdio.h
/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/sys/stdio.h
/usr/include/_stdio.h
/usr/include/secure/_stdio.h
/usr/include/stdio.h   👈 I believe this is the one that's usually missing.
                            but I have it.
/usr/include/sys/stdio.h
/usr/include/xlocale/_stdio.h

因此,让我们转到第一个clang抱怨的目录并查看:

(venv) jluc@gotchas$ cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
(venv) jluc@SDKs$ ls -l
total 0
drwxr-xr-x  8 root  wheel  256 Aug 29 23:47 MacOSX.sdk
drwxr-xr-x  4 root  wheel  128 Aug 29 23:47 DriverKit19.0.sdk
drwxr-xr-x  6 root  wheel  192 Sep 11 04:47 ..
lrwxr-xr-x  1 root  wheel   10 Oct  1 13:28 MacOSX10.15.sdk -> MacOSX.sdk  👈
drwxr-xr-x  5 root  wheel  160 Oct  1 13:34 .

呵呵,我们有一个用于MacOSX10.15.sdk的符号链接,但没有一个用于MacOSX10.14.sdk的符号链接。这又是我的第一个clang错误:

clang: warning: no such sysroot directory: '/Applications/Xcode.app/.../Developer/SDKs/MacOSX10.14.sdk' [-Wmissing-sysroot]

我的猜测是,苹果公司在他们的xcode配置上大开眼界,并且已经认为他们在Catalina上。由于它是新Mac,因此没有适用于10.14的旧配置。

修复:

让我们以10.15的相同方式对10.14进行符号链接:

ln -s MacOSX.sdk/ MacOSX10.14.sdk

顺便说一句,如果我转到该sdk目录,则会发现:

...
./usr/include/sys/stdio.h
./usr/include/stdio.h
....

结果:

pip install psycopg2 作品。

注意:实际的pip install命令没有引用MacOSX10.14.sdk,后者稍后出现,可能是通过Python安装机制自省了OS版本。


pip您正在使用哪个?我认为这可能是关键问题。
富兰克林于

3

确保检查Xcode首选项->位置。

我选择的命令行工具用于Xcode的早期版本(8.2.1而不是10.1)


2

遇到了与OP类似的问题

问题

猫你好

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

lang hello.c

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

尝试修复

我安装了最新版本的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中的详细信息 ,位于“ 新功能”部分下。


适用于我的解决方案...

使用此评论中的详细信息,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:我也在这里评论了这个问题。


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

我尝试了几乎所有已发布的解决方案,但对我没有任何帮助。我使用Mojave OS(10.14.6),最终对我有用(删除并重新安装Xcode和CLT和SDK标头之后):

  1. https://cran.r-project.org/bin/macosx/tools/安装Clang v8
  2. 修改〜/ .R / Makevars文件中的以下行
CC=/usr/local/opt/llvm/bin/clang -fopenmp
CXX=/usr/local/opt/llvm/bin/clang++

CC=/usr/local/clang8/bin/clang -fopenmp
CXX=/usr/local/clang8/bin/clang++

现在,依赖C编译器的R包已成功安装


0

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

对我来说最有效的方法是,brew upgrade在后台更新gcc和/或自制软件所做的任何其他操作解决了路径问题。



0

迁移后,我在Golang(使用Goland进行调试)中遇到了相同的问题。唯一有用的(荒谬的)事情是重命名了以下文件夹:

sudo mv /usr/local/include /usr/local/old_include

显然,它与自制安装并已损坏的旧文件有关。


-1

@JL Peyret是对的!

如果您是macOS 10.14.6 Mojave,Xcode 11.0+

然后

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

须藤ln -s MacOSX.sdk / MacOSX10.14.sdk


这不是评论吗?
富兰克林于
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.