Não é possível compilar o programa C em um Mac após a atualização para o Mojave

159

Eu usei o comando gcc no terminal para compilar programas C, mas de repente, após uma atualização no SO do meu Mac (no macOS 10.14 Mojave e XCode 10.0), comecei a receber a mensagem:

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

Eu já tenho o gcc instalado, pois posso encontrá-lo /usr/local/bine realmente existe um gcc lá. Tentei executar o mesmo arquivo no meu outro iMac e funcionou sem problemas.

Tentei executar xcode-select --installe ele já estava instalado, portanto, não corrigiu o problema que estou tendo agora. Eu estou supondo que o caminho está bagunçado, pois não parece que ele pode encontrar gccdepois que comecei a copiar e colar alguns comandos de outros recursos para resolver esse problema.

Gostaria de alguma ajuda sobre isso.

Maxxx
fonte
5
Você pode verificar os caminhos de pesquisa de gcc usandoecho "#include <a.h>" | gcc -v -x c -
Matt
2
Muitas vezes, xocde-select --installé a solução correta. Para quais serviços você atualizou? Mojave 10.14? Qual XCode você instalou? 10.0 ou outra versão?
Jonathan Leffler
39
@JonathanLeffler Eu encontrei uma maneira. Se estivermos usando o XCode 10, você notará que, se navegar para / usr no Finder, não verá mais uma pasta chamada 'include', motivo pelo qual o terminal reclama da ausência dos arquivos de cabeçalho contidos no diretório pasta 'include'. Nesta declaração de release, developer.apple.com/documentation/xcode_release_notes/… (você navega para /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg e execute esse pacote para que a pasta 'include' esteja instalada). Então você deve estar pronto para ir.
Maxxx
1
Quando tudo mais falhar, leia o manual! Ou as notas de versão. Não estou terrivelmente surpreso ao descobrir que a Apple quer dar as costas à herança do Unix. Estou desapontado. Se eles forem cuidadosos, eles poderiam me afastar. Obrigado pela informação; Vou experimentar mais tarde (depois de pegar algumas horas de olhos fechados).
Jonathan Leffler
16
Depois de instalar o pacote ( open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgna linha de comando), eu o instalei /usr/includenovamente e meu GCC 8.2.0 funciona mais uma vez. Obrigado pelo ponteiro; bem feito em encontrá-lo. Sugiro que você escreva a resposta, pois provavelmente haverá outras pessoas enfrentando o problema.
Jonathan Leffler 26/09

Respostas:

264

TL; DR

Verifique se você baixou o pacote mais recente 'Command Line Tools' e execute-o em um terminal (linha de comando):

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

Para obter mais informações sobre o Catalina, consulte Não é possível compilar um programa C em um Mac após a atualização para o Catalina 10.15 .


Extrair uma resposta semi-coerente de comentários bastante extensos…

Preâmbulo

Muitas vezes, xcode-select --installtem sido a solução correta, mas não parece ajudar neste momento. Você tentou executar a interface principal do Xcode GUI? Pode instalar algum software extra para você e limpar. Fiz isso depois de instalar o Xcode 10.0, mas uma semana ou mais atrás, muito antes de atualizar para o Mojave.

Observo que, se o seu GCC estiver instalado /usr/local/bin, você provavelmente não está usando o GCC do Xcode; normalmente instalado no /usr/bin.

Também atualizei para o macOS 10.14 Mojave e o Xcode 10.0. No entanto, o sistema /usr/bin/gcce o sistema /usr/bin/clangestão funcionando para mim ( Apple LLVM version 10.0.0 (clang-1000.11.45.2) Target: x86_64-apple-darwin18.0.0para ambos.) Tenho um problema com o meu GCC 8.2.0 caseiro que não encontra cabeçalhos /usr/include, o que é paralelo ao seu problema com o fato de /usr/local/bin/gccnão encontrar cabeçalhos.

Fiz algumas comparações e minha máquina Mojave não tem nenhuma /usr/include, mas /usr/bin/clangé capaz de compilar OK. Um cabeçalho ( _stdio.h, com sublinhado à esquerda) estava no meu antigo /usr/include; está faltando agora (daí o meu problema com o GCC 8.2.0). Eu executei xcode-select --installe disse " xcode-select: note: install requested for command line developer tools" e depois executei um instalador da GUI que me mostrou uma licença com a qual eu concordei, e ele baixou e instalou as ferramentas de linha de comando - ou pelo menos foi o que afirmou.

Em seguida, executei o Xcode GUI (espaço de comando, Xcode, return) e ele disse que precisava instalar mais software, mas ainda não /usr/include. Mas eu posso compilar com /usr/bin/clange /usr/bin/gcc- e a -vopção sugere que eles estão usando

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

Solução de trabalho

Então Maxxx observou :

Eu encontrei um caminho. Se estivermos usando o Xcode 10, você notará que, se navegar para o /usrFinder, não verá mais uma pasta chamada 'include', e é por isso que o terminal reclama da ausência dos arquivos de cabeçalho que estão contidos dentro a pasta 'incluir'. Nas notas de versão do Xcode 10.0 , ele diz que há um pacote:

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

e você deve instalar esse pacote para ter a /usr/includepasta instalada. Então você deve estar pronto para ir.

Quando tudo mais falhar, leia o manual ou, neste caso, as notas de versão. Não estou terrivelmente surpreso ao encontrar a Apple querendo dar as costas à sua herança Unix, mas estou decepcionado. Se eles forem cuidadosos, eles poderiam me afastar. Obrigado pela informação.

Depois de instalar o pacote usando o seguinte comando na linha de comando, tenho /usr/includenovamente e meu GCC 8.2.0 funciona mais uma vez.

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

Download de ferramentas de linha de comando

Como Vesal aponta em um comentário valioso , você precisa fazer o download do pacote Command Line Tools para o Xcode 10.1 no Mojave 10.14, e pode fazê-lo em:

Você precisa fazer o login com um ID Apple para conseguir o download. Quando você tiver feito o download, instale o pacote Command Line Tools. Em seguida, instale os cabeçalhos conforme descrito na seção 'Solução de trabalho'.

Isso funcionou para mim no Mojave 10.14.1. Eu devo ter baixado isso antes, mas eu tinha esquecido quando estava respondendo a essa pergunta.

Atualize para o Mojave 10.14.4 e o Xcode 10.2

Em 17/05/2019, atualizei para o Mojave 10.14.4 e as ferramentas de linha de comando do Xcode 10.2 também foram atualizadas (ou as ferramentas de linha de comando do Xcode 10.1 foram atualizadas para a 10.2). O opencomando mostrado acima corrigiu os cabeçalhos ausentes. Ainda pode haver aventuras com a atualização do Xcode principal para 10.2 e a reinstalação das ferramentas de linha de comando e do pacote de cabeçalhos.

Atualize para o Xcode 10.3 (para Mojave 10.14.6)

Em 2019-07-22, recebi um aviso via App Store de que a atualização para o Xcode 10.3 está disponível e inclui SDKs para iOS 12.4, tvOS 12.4, watchOS 5.3 e macOS Mojave 10.14.6. Instalei-o em uma das minhas máquinas 10.14.5, executei-o e instalei componentes extras, conforme sugerido, e parece que ele permaneceu /usr/includeintacto.

Mais tarde, no mesmo dia, descobri que o macOS Mojave 10.14.6 também estava disponível (Preferências do Sistema Update Atualização de Software), junto com o pacote IIRC de Utilitários de Linha de Comando (foi baixado e instalado automaticamente). A instalação da atualização do / s acabou, mais uma vez /usr/include, mas o opencomando na parte superior da resposta o restabeleceu novamente. A data que eu tinha no arquivo para o opencomando era 15/07/2019.

Atualize para o XCode 11.0 (para Catalina 10.15)

A atualização para o XCode 11.0 ("inclui Swift 5.1 e SDKs para iOS 13, tvOS 13, watchOS 6 e macOS Catalina 10.15") foi lançada em 2019-09-21. Fui notificado de 'atualizações disponíveis' e baixei e instalei em máquinas executando o macOS Mojave 10.14.6 por meio do aplicativo App Store (guia atualizações) sem problemas e sem ter que usar o futz /usr/include. Imediatamente após a instalação (antes de executar o aplicativo), tentei uma recompilação e me disseram:

Concordando com a licença Xcode / iOS requer privilégios de administrador, execute “sudo xcodebuild -license” e tente novamente este comando.

Executar that ( sudo xcodebuild -license) me permitiu executar o compilador. Desde então, executei o aplicativo para instalar componentes extras necessários; ainda não há problema. Resta saber o que acontece quando atualizo para a própria Catalina - mas minhas máquinas macOS Mojave 10.14.6 estão em boas condições no momento (24/09/2019).

Jonathan Leffler
fonte
4
ah obrigado por escrever isso. Muito apreciado. Felicidades!
Maxxx
6
Resolvido para mim !!! Muito obrigado por reservar um tempo para escrever isso!
precisa saber é o seguinte
8
GRUMP !!! As coisas mudaram novamente com a atualização 10.14.1 - ou, pelo menos, parecem ter mudado novamente. Para mim, parece que a atualização do / s desapareceu/usr/includee o pacote listado na resposta acima não está presente/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgexcode-select --installdiz que as ferramentas de linha de comando atualmente não estão disponíveis.
27675 Jonathan
15
Fcking Apple. Eles não podem simplesmente deixar as coisas que funcionam, eles precisam mudar as coisas, adicionar etapas e criar rotatividade.
7
Na esperança de que os motores de busca vai encontrar esta resposta, as instruções acima resolveu um fatal error: bits/ctype_base.h: No such file or directory: #include <bits/ctype_base.h>ao compilar GCC 7.4.0 usando libstdc ++ em Mojave para mim
Adam Lindberg
30

Depois de tentar todas as respostas que pude encontrar aqui e on-line, ainda estava recebendo erros por alguns cabeçalhos ausentes. Ao tentar compilar pyRFR, eu estava recebendo erros por stdexceptnão ter sido encontrado, o que aparentemente não foi instalado nos /usr/includeoutros cabeçalhos. No entanto, descobri onde estava escondido no Mojave e adicionei isso ao final do meu ~/.bash_profilearquivo:

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

Feito isso, agora posso compilar pyRFR e outros programas C / C ++. De acordo com echo | gcc -E -Wp,-v -, o gcc procurava no local antigo esses cabeçalhos (sem o /c++/v1), mas não o novo local, acrescentando que o CFLAGS o corrigiu.

Nigel
fonte
Nada funcionou, mas este funcionou. Muito obrigado!!
Felix
2
wickedsickbrothnx
Davis Dulin
23

Quando você

  • atualizado para Mojave 10.14.6
  • você /usr/includefoi excluído novamente
  • o pacote mencionado na resposta @ Jonathan-lefflers não existe mais The file /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg does not exist.e
  • Xcode reclama que ferramentas de linha de comando já estão instaladas xcode-select --install xcode-select: error: command line tools are already installed, use "Software Update" to install updates

Então, o que me ajudou a recuperar o pacote mencionado foi a exclusão de toda a CommandLineToolspasta (sudo) rm -rf /Library/Developer/CommandLineToolse a reinstalação xcode-select --install.

Plattenschieber
fonte
Excelente! Após suas etapas, a macOS_SDK_headers_for_macOS_10.14.pkgdisponibilização e o comando open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgfizeram o que deveria fazer. Graças um milhão !!
Bruno Ambrozio
3
Para mim, o seguinte funcionou: export CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include
rbieber 22/11/19
Obrigado! Eu estava preso, mas isso realmente funcionou para mim com o Mojave 10.4.6 e o ​​XCode 11.3.1
Simeon G
Sempre que a Apple lançou uma atualização do sistema, eu tenho que corrigir esse problema com o Clion de maneira diferente.
igonejack 14/03
12

O problema é que o Xcode, especialmente o Xcode 10.x, não instalou tudo, portanto, verifique se as ferramentas da linha de comando estão instaladas, digite isso no shell do terminal:

xcode-select --install

Também inicie o Xcode e garanta que toda a instalação necessária esteja instalada (você deve ser avisado se não estiver). Como o Xcode 10 não instala o SDK completo do Mac OS, execute o instalador em

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

como este pacote não está instalado pelo Xcode 10.

James Rinkevich
fonte
1
Isso me salvou. Muito obrigado!
Demven Weir 27/08/19
7

Encontrei ótima solução e explicação neste comentário do GitHub . O truque:

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

Fiz o trabalho.

Roubar
fonte
5

NOTA: O seguinte é provavelmente altamente contextual e com tempo limitado antes da troca / disponibilidade geral do macos Catalina 10.15. Novo laptop. Estou escrevendo isso em 1º de outubro de 2019.

Essas circunstâncias específicas são, acredito, o que causou problemas de construção para mim. Eles podem não se aplicar na maioria dos outros casos.

Contexto:

  • macos 10.14.6 Mojave, Xcode 11.0, logo antes do lançamento do macos Catalina 10.15 . Recém-adquirido Macbook Pro.

  • falha no pip install psycopg2, que é, basicamente, um pacote Python sendo compilado a partir do código-fonte.

  • Eu já realizei vários dos ajustes sugeridos nas respostas fornecidas aqui.

Meus erros:

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 

O que fiz até agora, sem consertar nada:

  • xcode-select --install
  • xcode instalado
  • open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Ainda o mesmo erro no stdio.h.

que existe em vários locais:

(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

Então, vamos ao primeiro diretório que clangestá reclamando e veja:

(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 .

Ah, temos um link simbólico para o MacOSX10.15.sdk , mas nenhum para o MacOSX10.15.sdk . Aqui está o meu primeiro clangerro novamente:

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

Meu palpite é que a Apple deu um pulo na configuração do xcode e já está pensando que está na Catalina. Por ser um Mac novo, a configuração antiga para 10.14 não está em vigor.

O CONSERTO:

Vamos ligar o link 10.14 da mesma maneira que o 10.15:

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

btw, se eu for para esse diretório sdk, encontro:

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

RESULTADO:

pip install psycopg2 trabalho.

Nota: o comando pip install real não fez referência ao MacOSX10.14.sdk , que veio posteriormente, possivelmente pelo mecanismo de instalação do Python que inspeciona a versão do sistema operacional.

JL Peyret
fonte
Qual pipvocê está usando? Eu acho que esse pode ser o principal problema.
Franklin Yu
3

Certifique-se de verificar Preferências do Xcode -> Locais.

As ferramentas de linha de comando que eu selecionei foram para a versão anterior do Xcode (8.2.1 em vez de 10.1)

bitbrane
fonte
2

Teve problemas semelhantes aos do OP

Questão

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...

Tentativa de correção

Eu instalei a versão mais recente do XCode, no entanto, as notas de versão indicaram que o arquivo mencionado na correção anterior, do Jonathan aqui, não estava mais disponível.

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

Detalhes aqui https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes , na seção Novos Recursos .


Solução que funcionou para mim ...

Usando os detalhes deste comentário, https://github.com/SOHU-Co/kafka-node/issues/881#issuecomment-396197724

Descobri que brew doctorhavia incluído inclusões não utilizadas na minha /usr/local/pasta.

Então, para corrigir, usei o comando fornecido pelo usuário HowCrazy , para encontrar as não utilizadas e movê-las para uma pasta temporária.

Repetido aqui ...

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

Após a execução dos scripts, o problema do arquivo de inclusão desapareceu. Nota: também comentei essa questão aqui .

mlo55
fonte
1

Eu estava tendo esse problema e nada funcionou . Eu corri xcode-select --installe também instalei /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg.

FUNDO

Como estava tendo problemas com a App Store em um novo laptop, fui forçado a baixar o instalador do Xcode Beta no site da Apple para instalar o Xcode fora da App Store . Então, eu só tinha o Xcode Beta instalado.

SOLUÇÃO

Isso (eu acho) estava fazendo clangpara não encontrar o SDKROOTdiretório /Applications/Xcode.app/...., porque não há Betano caminho, ou talvez o Xcode Beta simplesmente não o instale (eu não sei). Para corrigir o problema, tive que remover o Xcode Beta e resolver o problema da App Store para instalar a versão de lançamento.

tldr;

Se você possui o Xcode Beta , tente limpar tudo e instalar a versão de lançamento antes de experimentar as soluções que estão funcionando para outras pessoas.

Sergio Pulgarin
fonte
1

Eu tentei quase todas as soluções postadas e nada funcionou para mim. Uso o Mojave OS (10.14.6) e o que finalmente funcionou para mim (depois de remover e reinstalar os cabeçalhos Xcode, CLTs e SDK):

  1. Instale o Clang v8 em https://cran.r-project.org/bin/macosx/tools/
  2. Modifique as seguintes linhas do arquivo ~ / .R / Makevars
CC=/usr/local/opt/llvm/bin/clang -fopenmp
CXX=/usr/local/opt/llvm/bin/clang++

com

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

Agora os pacotes R que dependem dos compiladores C são instalados com sucesso

Mak
fonte
0

Como Jonathan Leffler aponta acima, o arquivo macOS_SDK_headers.pkg não está mais no Xcode 10.1.

O que funcionou para mim foi fazer brew upgradee as atualizações do gcc e / ou de qualquer outra coisa que o homebrew fez nos bastidores resolveu os problemas do caminho.

Dan
fonte
0

A dependência do apue.h ainda estava faltando no meu /usr/local/includedepois que eu consegui corrigir esse problema no Mac OS Catalina seguindo as instruções desta resposta

Eu baixei a dependência manualmente do git e a coloquei em/usr/local/include

Matthew Barbara
fonte
0

Eu tive o mesmo problema com o Golang (depuração com Goland) após a migração. A única coisa (ridícula) que ajudou é renomear a seguinte pasta:

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

Aparentemente, está relacionado a arquivos antigos que o homebrew instalou e agora está quebrado.

Vladik Y
fonte
-1

@JL Peyret está certo!

se você usa o Mojave 10.14.6, Xcode 11.0+

então

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

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

user6821154
fonte
Isso não deveria ser um comentário?
Franklin Yu