it-swarm-eu.dev

Non è possibile compilare il programma C su un Mac dopo l'aggiornamento a Mojave

Ho usato il comando gcc sul terminale per compilare i programmi C ma all'improvviso, dopo un aggiornamento al mio sistema operativo Mac (a macOS 10.14 Mojave e XCode 10.0), ho iniziato a ricevere il messaggio:

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

Ho già installato gcc come posso trovarlo in /usr/local/bin e c'è davvero un gcc in là. Ho provato a eseguire lo stesso file sul mio altro iMac e ha funzionato senza alcun problema.

Ho provato a eseguire xcode-select --install ed era già installato, quindi non ha risolto il problema che sto avendo ora. Sto indovinando che il percorso è incasinato perché non sembra che possa trovare gcc dopo che ho iniziato a copiare e incollare alcuni comandi da altre risorse per risolvere questo problema.

Vorrei qualche aiuto su questo.

96
Maxxx

TL; DR

Assicurati di aver scaricato l'ultimo pacchetto "Command Line Tools" ed eseguilo da un terminale (riga di comando):

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

Estrarre una risposta semi-coerente da commenti piuttosto ampi ...

Preambolo

Molto spesso, xcode-select --install è stata la soluzione corretta, ma non sembra che questa volta aiuti. Hai provato a utilizzare l'interfaccia GUI Xcode principale? Può installare del software aggiuntivo per te e ripulirlo. L'ho fatto dopo aver installato Xcode 10.0, ma una settimana o più fa, molto prima di passare a Mojave.

Osservo che se il tuo GCC è installato in /usr/local/bin, probabilmente non stai usando il GCC da Xcode; normalmente è installato in /usr/bin.

Anch'io ho aggiornato a macOS 10.14 Mojave e Xcode 10.0. Tuttavia, sia il sistema /usr/bin/gcc che il sistema /usr/bin/clang funzionano per me (Apple LLVM version 10.0.0 (clang-1000.11.45.2) Target: x86_64-Apple-darwin18.0.0 per entrambi.) Ho un problema con GCC 8.2.0 di casa non trovando intestazioni in /usr/include, che è parallelo al tuo problema con /usr/local/bin/gcc non trovare intestazioni .

Ho fatto un po 'di paragone e la mia macchina Mojave non ha affatto /usr/include, tuttavia /usr/bin/clang è in grado di compilare OK. Un'intestazione (_stdio.h, con underscore principale) era nel mio vecchio /usr/include; ora manca (da qui il mio problema con GCC 8.2.0). Ho eseguito xcode-select --install e ha detto "xcode-select: note: install requested for command line developer tools" e poi ho eseguito un programma di installazione della GUI che mi ha mostrato una licenza che ho accettato, e ha scaricato e installato gli strumenti da riga di comando - o così sosteneva.

Ho quindi eseguito Xcode GUI (command-space, Xcode, return) e ha detto che era necessario installare un altro software, ma ancora non /usr/include. Ma posso compilare con /usr/bin/clang e /usr/bin/gcc - e l'opzione -v suggerisce che stanno usando

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

Soluzione di lavoro

Quindi Maxxxannotato :

Ho trovato un modo. Se utilizziamo Xcode 10, noterai che se navighi su /usr nel Finder, non vedrai più una cartella chiamata "include", motivo per cui il terminale si lamenta dell'assenza dei file di intestazione contenuti all'interno della cartella 'include'. Nelle note di rilascio di Xcode 10.0 , viene indicato un pacchetto:

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

e dovresti installare quel pacchetto per avere la cartella /usr/include installata. Allora dovresti essere bravo ad andare.

Quando tutto il resto fallisce, leggi il manuale o, in questo caso, le note di rilascio. Non sono terribilmente sorpreso di trovare Apple che vuole voltare le spalle alla loro eredità Unix, ma sono deluso. Se stanno attenti, potrebbero portarmi via. Grazie per l'informazione.

Avendo installato il pacchetto usando il seguente comando alla riga di comando, ho nuovamente /usr/include e il mio GCC 8.2.0 funziona ancora una volta.

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

Download di strumenti da riga di comando

Come Vesal indica in un prezioso commento , devi scaricare il pacchetto Strumenti riga di comando per Xcode 10.1 su Mojave 10.14, e puoi farlo da:

È necessario accedere con un ID Apple per poter scaricare. Al termine del download, installa il pacchetto Strumenti riga di comando. Quindi installare le intestazioni come descritto nella sezione "Soluzione di lavoro".

Questo ha funzionato per me su Mojave 10.14.1. Devo averlo scaricato prima, ma mi ero dimenticato quando stavo rispondendo a questa domanda.

Esegui l'upgrade a Mojave 10.14.4 e XCode 10.2

Ho aggiornato Mojave 10.14.4 e sono stati aggiornati anche gli strumenti da riga di comando XCode 10.2 (oppure gli strumenti da riga di comando XCode 10.1 sono stati aggiornati a 10.2). Il comando open mostrato sopra ha corretto le intestazioni mancanti. Potrebbero ancora esserci avventure con l'aggiornamento del XCode principale a 10.2 e quindi reinstallare gli strumenti da riga di comando e il pacchetto delle intestazioni.

160
Jonathan Leffler

Dopo aver provato ogni risposta che ho trovato qui e online, stavo ancora ricevendo errori per alcune intestazioni mancanti. Quando provavo a compilare pyRFR, ricevevo errori su stdexcept che non veniva trovato, che apparentemente non era installato in /usr/include con le altre intestazioni. Tuttavia, ho trovato dove si nascondeva in Mojave e ho aggiunto questo alla fine del mio file ~/.bash_profile:

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

Fatto ciò, ora posso compilare pyRFR e altri programmi C/C++. Secondo echo | gcc -E -Wp,-v -, gcc stava cercando nella vecchia posizione queste intestazioni (senza /c++/v1), ma non la nuova posizione, quindi l'aggiunta a CFLAGS l'ha corretta.

12
Nigel

Il problema è che Xcode, specialmente Xcode 10.x, non ha installato tutto, quindi assicurati che gli strumenti della riga di comando siano installati, digita questo in un terminale Shell:

xcode-select --install

inoltre avvia XCode e verifica che tutta l'installazione richiesta sia installata (dovresti ricevere una richiesta se non lo è.) e poiché XCode 10 non installa l'intero SDK per Mac OS, esegui l'installer su

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

poiché questo pacchetto non è installato da XCode 10.

4
James Rinkevich

Assicurati di selezionare Xcode Preferences -> Locations.

Gli strumenti della riga di comando che avevo selezionato erano per la versione precedente di Xcode (8.2.1 invece di 10.1)

3
bitbrane

Ho avuto problemi simili come l'OP

Problema

gatto ciao.c

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

clang ciao.c

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

Tentativo di correzione

Ho installato l'ultima versione di XCode, tuttavia, le note di rilascio indicavano che il file menzionato nella precedente correzione, da Jonathan qui, non era più disponibile.

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

Dettagli qui https://developer.Apple.com/documentation/xcode_release_notes/xcode_10_release_notes , sotto Nuove funzionalità sezione.


Soluzione che ha funzionato per me ...

Utilizzando i dettagli in questo commento, https://github.com/SOHU-Co/kafka-node/issues/881#issuecomment-396197724

Ho trovato che brew doctor ha riportato che includevo include nella mia cartella /usr/local/.

Quindi per risolvere, ho usato il comando fornito dall'utente HowCrazy , per trovare gli include non utilizzati e spostarli in una cartella temporanea.

Ripetuto qui ...

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

Dopo aver eseguito gli script, il problema del file include era sparito. nb: Ho commentato questo problema anche qui anche.

1
mlo55

Stavo avendo questo problema e niente ha funzionato . Ho eseguito xcode-select --install e ho anche installato /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg.

SFONDO

Poiché avevo problemi con App Store su un nuovo laptop, sono stato costretto a scaricare il XCode Beta installer dal sito Web di Apple per installare XCode outside App Negozio . Quindi ho avuto solo XCode Beta installato.

SOLUZIONE

Questo, (penso), stava rendendo clang per non trovare la directory SDKROOT/Applications/Xcode.app/...., perché non c'è Beta nel percorso, o forse XCode Beta semplicemente non lo installa (I don lo so). Per risolvere il problema, ho dovuto rimuovere XCode Beta e risolvere App Store issue per installare la versione di rilascio.

tldr;

Se hai XCode Beta , prova a ripulire tutto e installare la versione di rilascio prima di provare le soluzioni che funzionano per altre persone.

0
Sergio Pulgarin

Ho trovato un'ottima soluzione e spiegazione a questo commento GitHub . Il trucco:

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

Ha fatto il lavoro.

0
Rob