web-dev-qa-db-ja.com

Mojaveにアップグレードした後、Mac上でCプログラムをコンパイルできない

ターミナルで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.

/usr/local/binで見つけることができるので、私はすでにgccをインストールしています、そしてそこに本当にgccがあります。私は他のiMacで同じファイルを実行しようとしましたが、問題なく動作しました。

私はxcode-select --installを実行しようとしました、そしてそれはすでにインストールされていました、それでそれは私が今抱えている問題を解決しませんでした。この問題を解決するために他のリソースからいくつかのコマンドをコピーして貼り付け始めた後でgccを見つけることができないように思われるので、パスはめちゃくちゃになっていると思います。

これについて何か手助けをしたいです。

96
Maxxx

TL; DR

最新の「コマンドラインツール」パッケージをダウンロードしたことを確認し、ターミナル(コマンドライン)からこれを実行します。

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

かなり広範なコメントから半一貫性のある回答を抽出しています…

前文

多くの場合、xcode-select --installが正しいソリューションでしたが、今回は役に立たないようです。メインのXcode GUIインターフェイスを実行しようとしましたか?追加のソフトウェアがインストールされ、クリーンアップされる場合があります。 Xcode 10.0をインストールしてから1週間以上前に、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)。/usr/includeの問題と並行して、自家製のGCC 8.2.0が/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

実用的なソリューション

それから Maxxx注記

方法を見つけました。 Xcode 10を使用している場合は、Finderで/usrに移動すると、「include」というフォルダーが表示されなくなることに気付くでしょう。 「include」フォルダー内。 Xcode 10.0リリースノート には、パッケージがあると記載されています。

/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

コマンドラインツールのダウンロード

Vesal は貴重な comment を示しているため、Mojave 10.14でXcode 10.1のコマンドラインツールパッケージをダウンロードする必要があります。

ダウンロードを取得するには、Apple IDでログインする必要があります。ダウンロードが完了したら、コマンドラインツールパッケージをインストールします。次に、「Working Solution」セクションの説明に従ってヘッダーをインストールします。

これは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マシンの1つにインストールして実行し、提案どおりに追加のコンポーネントをインストールしましたが、/usr/includeはそのまま残っているようです。

同じ日、macOS Mojave 10.14.6も利用可能(システム環境設定⟶ソフトウェアアップデート)に加えて、コマンドラインユーティリティパッケージIIRC(自動的にダウンロードおよびインストールされた)を発見しました。 o/s更新プログラムをインストールすると、もう一度/usr/includeが消去されましたが、回答の上部にあるopenコマンドで復元されました。 openコマンドのファイルの日付は2019-07-15です。

214

私がここでそしてオンラインで見つけることができたすべての答えを試みた後、私はまだいくつかの行方不明のヘッダーのためのエラーを得ていました。 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に追加しました。

12
Nigel

問題は、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ではインストールされないためです。

4
James Rinkevich

必ずXcodeの設定 - >場所を確認してください。

私が選択したコマンドラインツールは、Xcodeの以前のバージョン用です(10.1ではなく8.2.1)。

3
bitbrane

OPと同じような問題がありました

問題

猫こんにちは。

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

こんにちは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
mlo55

私はこの問題を抱えていました、そして 何もうまくいきませんでした 。私はxcode-select --installを実行し、また/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgをインストールしました。

バックグラウンド

新しいラップトップでApp Storeに​​問題があったので、Apple Webサイトから XCode BetaインストーラをダウンロードしてApp Storeの外側にXCodeをインストールすることを余儀なくされました。だから私は XCode Betaしかインストールしていなかった。

_ソリューション_

これは(私は思う)、clangSDKROOTディレクトリ/Applications/Xcode.app/....を見つけられないようにするためでした。パスにBetaがない、または XCode Beta単にそれをインストールしないからです知っている)。この問題を解決するには、 XCode Betaを削除し、App Storeの問題を解決してリリース版をインストールする必要がありました。

tldr;

XCode Betaをお持ちの場合は、他の人のために働いている解決策を試す前にすべてを片付けてリリース版をインストールしてみてください。

0
Sergio Pulgarin

GitHubのコメント で素晴らしい解決方法と説明が見つかりました。トリック:

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

仕事をしました。

0
Rob