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

时间:2018-09-26 03:42:27

标签: c macos gcc terminal

我已经在终端上使用gcc命令来编译C程序,但是突然之间,在更新Mac OS(至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

在此方面需要帮助。

15 个答案:

答案 0 :(得分:170)

TL; DR

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

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

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

序言

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出现问题,无法在{{ 1}},这与您的问题类似,/usr/include也找不到标题。

我做了一些比较,我的Mojave机器根本没有/usr/local/bin/gcc,但是/usr/include可以编译OK。我以前的/usr/bin/clang中有一个标头(_stdio.h,带下划线)。现在丢失了(因此我的GCC 8.2.0问题)。我运行了/usr/include,然后说“ xcode-select --install”,然后运行了一个GUI安装程序,该安装程序显示了我同意的许可证,并下载并安装了命令行工具-声称如此。 >

然后我运行了Xcode GUI(命令空间,Xcode,返回),它说它需要安装更多的软件,但仍然没有xcode-select: note: install requested for command line developer tools。但是我可以使用/usr/include/usr/bin/clang进行编译-并且/usr/bin/gcc选项表明它们正在使用

-v

工作解决方案

然后Maxxx noted

  

我找到了一种方法。如果我们使用的是Xcode 10,您会注意到,如果在Finder中导航到InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin ,您将再也看不到名为“ include”的文件夹,这就是为什么终端抱怨缺少标题的原因包含在“ include”文件夹中的文件。在Xcode 10.0 Release Notes中,它说有一个包装:

/usr
     

,您应该安装该软件包以安装/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg 文件夹。那你应该很好走。

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

已经在命令行上使用以下命令安装了软件包,我再次拥有/usr/include,并且我的GCC 8.2.0再次正常工作。

/usr/include

下载命令行工具

Vesal在一个有价值的comment中指出,您需要在Mojave 10.14上下载Xcode 10.1的命令行工具包,您可以从以下位置下载:

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

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

升级到Mojave 10.14.4和XCode 10.2

我已经更新到Mojave 10.14.4,并且XCode 10.2命令行工具也已升级(或XCode 10.1命令行工具已升级到10.2)。上面显示的open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg 命令修复了丢失的标题。将主XCode升级到10.2,然后重新安装命令行工具和头文件包,可能仍然会有冒险。

答案 1 :(得分:14)

尝试了所有可以在此处和在线找到的答案后,我仍然因某些缺少的标头而出错。尝试编译pyRFR时,遇到关于找不到stdexcept的错误,显然没有与其他标头一起安装在/usr/include中。但是,我发现它隐藏在Mojave中的位置,并将其添加到我的~/.bash_profile文件的末尾:

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

这样做,我现在可以编译pyRFR和其他C / C ++程序。根据{{​​1}},gcc会在旧位置查找这些标头(没有echo | gcc -E -Wp,-v -),而不是新位置,因此将其添加到CFLAGS中可以解决该问题。

答案 2 :(得分:14)

当你

  • 已更新为Mojave 10.14.6
  • 您的/usr/include被再次删除
  • @ Jonathan-lefflers answer中提到的软件包已不存在 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

答案 3 :(得分: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.14与10.15相同:

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版本进行了自省。

答案 4 :(得分:4)

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

  
    

xcode-select --install

  

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

  
    

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

  

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

答案 5 :(得分:3)

请务必检查Xcode偏好设置->位置。

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

答案 6 :(得分:2)

ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk'可能会对您有所帮助。它解决了我的问题。

答案 7 :(得分:1)

遇到与OP类似的问题

问题

  

cat hello.c

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

clang 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:我也对此问题here发表了评论。

答案 8 :(得分:1)

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

serde_json::Result::Err

完成工作了。

答案 9 :(得分: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软件包已成功安装

答案 10 :(得分:0)

我遇到了这个问题,无济于事。我运行了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 ,请先尝试清理所有内容并安装发行版,然后再尝试适用于其他人的解决方案。

答案 11 :(得分:0)

instructions of this answer

之后,我设法在Mac OS Catalina上解决此问题后,我的/usr/local/include中仍然缺少

apue.h 依赖性

我手动下载了依赖项from git,并将其放置在/usr/local/include

答案 12 :(得分:0)

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

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

显然,它与自家安装的旧文件有关,现在已损坏。

答案 13 :(得分:-1)

正如乔纳森·莱夫勒(Jonathan Leffler)指出的那样,Xcode 10.1中不再存在macOS_SDK_headers.pkg文件。

对我而言,最有效的方法是brew upgrade,而gcc和/或其他自家做的幕后更新解决了路径问题。

答案 14 :(得分:-2)

@JL Peyret是对的!

如果您是macOS 10.14.6 Mojave,Xcode 11.0 +

然后

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

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