No se puede compilar el programa C en una Mac después de actualizar a Mojave

159

He usado el comando gcc en el terminal para compilar programas en C, pero de repente, después de una actualización del sistema operativo de mi Mac (a macOS 10.14 Mojave y XCode 10.0), comencé a recibir el mensaje:

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

Ya tengo instalado gcc ya que puedo encontrarlo /usr/local/biny realmente hay un gcc allí. Intenté ejecutar el mismo archivo en mi otro iMac y funcionó sin ningún problema.

Intenté ejecutar xcode-select --instally ya estaba instalado, por lo tanto, no solucionó el problema que tengo ahora. Supongo que la ruta está en mal estado, ya que no parece que pueda encontrar gccdespués de que comencé a copiar y pegar algunos comandos de otros recursos para resolver este problema.

Quisiera ayuda en esto.

Maxxx
fuente
55
Puede verificar las rutas de búsqueda de gcc usandoecho "#include <a.h>" | gcc -v -x c -
Matt
2
Muy a menudo, xocde-select --installes la solución correcta. ¿A qué o / s te actualizaste? Mojave 10.14? ¿Qué XCode tienes instalado? 10.0 u otra versión?
Jonathan Leffler
39
@ JonathanLeffler He encontrado una manera. Si estamos utilizando XCode 10, notará que si navega a / usr en el Finder, ya no verá una carpeta llamada 'incluir', por lo que el terminal se queja de la ausencia de los archivos de encabezado que están contenidos dentro del carpeta 'incluir'. En esta declaración de lanzamiento, developer.apple.com/documentation/xcode_release_notes/… (navega a /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg y ejecuta ese paquete para tener instalada la carpeta 'incluir'). Entonces deberías ser bueno para ir.
Maxxx
1
¡Cuando todo lo demás falla, lea el manual! O las notas de lanzamiento. No estoy terriblemente sorprendido de encontrar a Apple queriendo darle la espalda a la herencia de Unix. Estoy decepcionado. Si tienen cuidado, podrían alejarme. Gracias por la información; Experimentaré con él más tarde (después de dormir unas horas con los ojos cerrados).
Jonathan Leffler
16
Después de instalar el paquete ( open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgen la línea de comando), lo tengo /usr/includenuevamente, y mi GCC 8.2.0 funciona una vez más. Gracias por la anotación; bien hecho por encontrarlo. Le sugiero que escriba la respuesta, ya que probablemente habrá otras personas que se encuentren con el problema.
Jonathan Leffler

Respuestas:

264

TL; DR

Asegúrese de haber descargado el último paquete de 'Herramientas de línea de comandos' y ejecútelo desde un terminal (línea de comandos):

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

Para obtener información sobre Catalina, consulte No se puede compilar un programa C en una Mac después de actualizar a Catalina 10.15 .


Extrayendo una respuesta semi-coherente de comentarios bastante extensos ...

Preámbulo

Muy a menudo, xcode-select --install ha sido la solución correcta, pero esta vez no parece ayudar. ¿Has intentado ejecutar la interfaz principal de Xcode GUI? Puede instalar algún software adicional para usted y limpiarlo. Lo hice después de instalar Xcode 10.0, pero hace una semana o más, mucho antes de actualizar a Mojave.

Observo que si su GCC está instalado /usr/local/bin, probablemente no esté usando el GCC de Xcode; que normalmente se instala en/usr/bin .

Yo también he actualizado a macOS 10.14 Mojave y Xcode 10.0. Sin embargo, tanto el sistema /usr/bin/gcccomo el sistema /usr/bin/clangfuncionan para mí ( Apple LLVM version 10.0.0 (clang-1000.11.45.2) Target: x86_64-apple-darwin18.0.0para ambos). Tengo un problema con mi GCC 8.2.0 de fabricación casera que no encuentra encabezados /usr/include, lo cual es paralelo a su problema de /usr/local/bin/gccno encontrar encabezados tampoco.

He hecho un poco de comparación, y mi máquina Mojave no tiene nada /usr/include, pero /usr/bin/clangpuede compilar OK. Un encabezado ( _stdio.hcon guión bajo) estaba en mi viejo /usr/include; falta ahora (de ahí mi problema con GCC 8.2.0). Ejecuté xcode-select --instally dijo " xcode-select: note: install requested for command line developer tools" y luego ejecuté un instalador de GUI que me mostró una licencia que acepté, y descargó e instaló las herramientas de línea de comandos, o eso afirmaba.

Luego ejecuté Xcode GUI (espacio de comando, Xcode, return) y dijo que necesitaba instalar más software, pero aún no /usr/include. Pero puedo compilar con /usr/bin/clangy /usr/bin/gcc, y la -vopción sugiere que están usando

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

Solución de trabajo

Entonces Maxxx notó :

He encontrado un camino. Si estamos utilizando Xcode 10, notará que si navega hasta el /usren el Finder, ya no verá una carpeta llamada 'incluir', por lo que el terminal se queja de la ausencia de los archivos de encabezado que contiene la carpeta 'incluir'. En las Notas de la versión de Xcode 10.0 , dice que hay un paquete:

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

y debe instalar ese paquete para tener la /usr/includecarpeta instalada. Entonces deberías ser bueno para ir.

Cuando todo lo demás falla, lea el manual o, en este caso, las notas de la versión. No estoy terriblemente sorprendido de encontrar a Apple queriendo darle la espalda a su herencia Unix, pero estoy decepcionado. Si tienen cuidado, podrían alejarme. Gracias por la información.

Habiendo instalado el paquete usando el siguiente comando en la línea de comando, lo tengo /usr/includenuevamente, y mi GCC 8.2.0 funciona una vez más.

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

Descargar herramientas de línea de comandos

Como Vesal señala en un comentario valioso , debe descargar el paquete de herramientas de línea de comandos para Xcode 10.1 en Mojave 10.14, y puede hacerlo desde:

Debe iniciar sesión con un ID de Apple para poder descargar. Cuando haya realizado la descarga, instale el paquete de herramientas de línea de comandos. Luego instale los encabezados como se describe en la sección 'Solución de trabajo'.

Esto funcionó para mí en Mojave 10.14.1. Debo haber descargado esto antes, pero me había olvidado cuando respondí esta pregunta.

Actualice a Mojave 10.14.4 y Xcode 10.2

El o alrededor del 2019-05-17, actualicé a Mojave 10.14.4, y las herramientas de línea de comando Xcode 10.2 también se actualizaron (o las herramientas de línea de comando Xcode 10.1 se actualizaron a 10.2). El opencomando que se muestra arriba corrigió los encabezados faltantes. Todavía puede haber aventuras con la actualización de Xcode principal a 10.2 y luego reinstalar las herramientas de línea de comandos y el paquete de encabezados.

Actualice a Xcode 10.3 (para Mojave 10.14.6)

El 22 de julio de 2019, recibí un aviso a través de la App Store de que la actualización a Xcode 10.3 está disponible y que incluye SDK para iOS 12.4, tvOS 12.4, watchOS 5.3 y macOS Mojave 10.14.6. Lo instalé en una de mis máquinas 10.14.5, lo ejecuté e instalé componentes adicionales como sugería, y parece que se ha quedado /usr/includeintacto.

Más tarde, el mismo día, descubrí que macOS Mojave 10.14.6 también estaba disponible (Preferencias del sistema Update Actualización de software), junto con un paquete de Utilidades de línea de comandos IIRC (se descargó e instaló automáticamente). La instalación de la actualización o / s, una vez más, eliminó /usr/include, pero el opencomando en la parte superior de la respuesta la restableció nuevamente. La fecha que tenía en el archivo para el opencomando fue 2019-07-15.

Actualice a XCode 11.0 (para Catalina 10.15)

La actualización a XCode 11.0 ("incluye Swift 5.1 y SDK para iOS 13, tvOS 13, watchOS 6 y macOS Catalina 10.15") se lanzó 2019-09-21. Me notificaron las 'actualizaciones disponibles', y las descargué e instalé en máquinas que ejecutan macOS Mojave 10.14.6 a través de la aplicación App Store (pestaña de actualizaciones) sin problemas y sin tener que preocuparme /usr/include. Inmediatamente después de la instalación (antes de ejecutar la aplicación en sí), probé una recompilación y me dijeron:

Aceptar la licencia Xcode / iOS requiere privilegios de administrador, ejecute "sudo xcodebuild -license" y vuelva a intentar este comando.

Ejecutar that ( sudo xcodebuild -license) me permitió ejecutar el compilador. Desde entonces, ejecuté la aplicación para instalar los componentes adicionales que necesita; Todavía no hay problema. Queda por ver qué sucede cuando actualizo a Catalina, pero mis máquinas macOS Mojave 10.14.6 están bien por el momento (2019-09-24).

Jonathan Leffler
fuente
44
Ah, gracias por escribir esto. Muy apreciado. ¡Salud!
Maxxx
66
Lo resolvió para mí! ¡Muchas gracias por tomarse el tiempo para escribir esto!
budekatude
8
GRUMP !!! Las cosas han cambiado nuevamente con la actualización 10.14.1, o, al menos, parecen haber cambiado nuevamente. Para mí, parece que la actualización o / s explotó/usr/include, y el paquete que figura en la respuesta anterior no está presente/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgyxcode-select --installdice que las herramientas de línea de comandos actualmente no están disponibles.
Jonathan Leffler el
15
Picando Apple. No pueden simplemente dejar cosas que funcionan, tienen que mover cosas, agregar pasos y crear abandono.
77
Con la esperanza de que los motores de búsqueda encuentren esta respuesta, las instrucciones anteriores resolvieron un problema fatal error: bits/ctype_base.h: No such file or directory: #include <bits/ctype_base.h>al compilar GCC 7.4.0 usando libstdc ++ en Mojave para mí
Adam Lindberg
30

Después de probar todas las respuestas que pude encontrar aquí y en línea, seguía recibiendo errores para algunos encabezados faltantes. Al intentar compilar pyRFR, recibía errores sobre stdexceptno ser encontrado, que aparentemente no estaba instalado /usr/includecon los otros encabezados. Sin embargo, encontré dónde se escondía en Mojave y agregué esto al final de mi ~/.bash_profilearchivo:

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

Una vez hecho eso, ahora puedo compilar pyRFR y otros programas C / C ++. Según echo | gcc -E -Wp,-v -, gcc estaba buscando en la ubicación anterior estos encabezados (sin la /c++/v1), pero no la nueva ubicación, por lo que agregarlo a CFLAGS lo solucionó.

Nigel
fuente
Nada funcionó, pero este sí. ¡¡Muchas gracias!!
Felix el
2
wickedsickbrothnx
Davis Dulin
23

Cuando usted

  • actualizado a Mojave 10.14.6
  • tu /usr/includefue eliminado nuevamente
  • el paquete mencionado en la respuesta de @ Jonathan-lefflers ya no existe The file /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg does not exist.y
  • Xcode se queja de que las herramientas de línea de comandos ya están instaladas xcode-select --install xcode-select: error: command line tools are already installed, use "Software Update" to install updates

Luego, lo que me ayudó a recuperar el paquete mencionado, fue eliminar toda la CommandLineToolscarpeta (sudo) rm -rf /Library/Developer/CommandLineToolsy volver a instalarla xcode-select --install.

Plattenschieber
fuente
¡Excelente! Después de sus pasos, se macOS_SDK_headers_for_macOS_10.14.pkgponen a disposición y el comando open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkghizo lo que se suponía que debía hacer. ¡¡Un millón de gracias!!
Bruno Ambrozio
3
Para mí, la siguiente trabajó: export CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include
rbieber
¡Gracias! Estaba atascado, pero esto realmente funcionó para mí con Mojave 10.4.6 y XCode 11.3.1
Simeon G
Cada vez que Apple lanza una actualización del sistema, tengo que solucionar este problema con Clion de manera diferente.
igonejack
12

El problema es que Xcode, especialmente Xcode 10.x, no ha instalado todo, así que asegúrese de que las herramientas de línea de comandos estén instaladas, escriba esto en un shell de terminal:

xcode-select --instalar

también inicie Xcode y asegúrese de que toda la instalación requerida esté instalada (se le solicitará si no es así) y dado que Xcode 10 no instala el SDK completo de Mac OS, ejecute el instalador en

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

ya que este paquete no está instalado por Xcode 10.

James Rinkevich
fuente
1
Esto me salvó. ¡Muchas gracias!
Demven Weir
7

He encontrado una gran solución y explicación en este comentario de GitHub . El truco:

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

Hizo el trabajo.

Robar
fuente
5

NOTA: Lo siguiente es probablemente altamente contextual y de tiempo limitado antes del cambio / disponibilidad general de macos Catalina 10.15. Nueva laptop. Estoy escribiendo este 1 de octubre de 2019.

Estas circunstancias específicas son, creo, lo que me causó problemas de construcción. Es posible que no se apliquen en la mayoría de los otros casos.

Contexto:

  • macos 10.14.6 Mojave, Xcode 11.0, justo antes del lanzamiento de macos Catalina 10.15 . Macbook Pro recién comprado.

  • fallo en pip install psycopg2, que es, básicamente, un paquete de Python que se compila desde la fuente.

  • Ya he llevado a cabo una serie de ajustes sugeridos en las respuestas que se dan aquí.

Mis errores:

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 

Lo que hice hasta ahora, sin arreglar nada:

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

Sigue siendo el mismo error en stdio.h.

que existe en varios lugares:

(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

Entonces, vamos al primer directorio del que clangse queja y miremos:

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

Ja, tenemos un enlace simbólico para MacOSX10.15.sdk , pero ninguno para MacOSX10.14.sdk . Aquí está mi primer clangerror nuevamente:

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

Supongo que Apple saltó el arma en su configuración de xcode y ya está pensando que están en Catalina. Dado que es una Mac nueva, la configuración anterior para 10.14 no está en su lugar.

LA SOLUCIÓN:

Hagamos un enlace simbólico 10.14 de la misma manera que 10.15:

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

por cierto, si voy al directorio sdk, encuentro:

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

SALIR:

pip install psycopg2 trabajos.

Nota: el comando de instalación de pip real no hizo referencia a MacOSX10.14.sdk , que llegó en un momento posterior, posiblemente por el mecanismo de instalación de Python que introspectaba la versión del sistema operativo.

JL Peyret
fuente
Que pipestas usando Creo que ese podría ser el problema clave.
Franklin Yu
3

Asegúrese de verificar las Preferencias de Xcode -> Ubicaciones.

Las herramientas de línea de comandos que había seleccionado eran para la versión anterior de Xcode (8.2.1 en lugar de 10.1)

bitbrane
fuente
2

Tuve problemas similares a los del OP

Problema

gato hola.c

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

clang hello.c

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

Intento de reparación

Instalé la última versión de XCode, sin embargo, las notas de la versión indicaban que el archivo mencionado en la corrección anterior, de Jonathan aquí, ya no estaba disponible.

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

Detalles aquí https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes , en la sección Nuevas características .


Solución que funcionó para mí ...

Usando detalles en este comentario, https://github.com/SOHU-Co/kafka-node/issues/881#issuecomment-396197724

Encontré que brew doctorinformó que tenía inclusiones no utilizadas en mi /usr/local/carpeta.

Entonces, para solucionarlo, utilicé el comando proporcionado por el usuario HowCrazy , para encontrar las inclusiones no utilizadas y moverlas a una carpeta temporal.

Repetido aquí ...

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

Después de ejecutar los scripts, el problema del archivo de inclusión desapareció. Nota: también he comentado sobre este tema aquí .

mlo55
fuente
1

Estaba teniendo este problema y nada funcionó . Corrí xcode-select --instally también instalé /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg.

ANTECEDENTES

Como tenía problemas con App Store en una nueva computadora portátil, me vi obligado a descargar el instalador Xcode Beta del sitio web de Apple para instalar Xcode fuera de App Store . Entonces solo tenía Xcode Beta instalado.

SOLUCIÓN

Esto, (creo), estaba haciendo clangpara no encontrar el SDKROOTdirectorio /Applications/Xcode.app/...., porque no hay Betaen el camino, o tal vez Xcode Beta simplemente no lo instala (no lo sé). Para solucionar el problema, tuve que eliminar Xcode Beta y resolver el problema de App Store para instalar la versión de lanzamiento.

tldr;

Si tiene Xcode Beta , intente limpiar todo e instalar la versión de lanzamiento antes de probar las soluciones que funcionan para otras personas.

Sergio Pulgarin
fuente
1

Probé casi todas las soluciones publicadas y nada funcionó para mí. Uso Mojave OS (10.14.6) y lo que finalmente funcionó para mí (después de quitar y reinstalar Xcode y CLT y encabezados SDK):

  1. Instale Clang v8 desde https://cran.r-project.org/bin/macosx/tools/
  2. Modifique las siguientes líneas del archivo ~ / .R / Makevars
CC=/usr/local/opt/llvm/bin/clang -fopenmp
CXX=/usr/local/opt/llvm/bin/clang++

con

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

Ahora los paquetes R que se basan en compiladores C se instalan con éxito

Mak
fuente
0

Como Jonathan Leffler señala anteriormente, el archivo macOS_SDK_headers.pkg ya no está en Xcode 10.1.

Lo que funcionó para mí fue hacer brew upgradey las actualizaciones de gcc y / o cualquier otra cosa que homebrew hiciera detrás de escena resolvió los problemas del camino.

Dan
fuente
0

La dependencia de apue.h todavía faltaba en mi /usr/local/includedespués de que logré solucionar este problema en Mac OS Catalina siguiendo las instrucciones de esta respuesta

Descargué la dependencia manualmente desde git y la coloqué en/usr/local/include

Matthew Barbara
fuente
0

Tuve el mismo problema con Golang (depuración con Goland) después de la migración. Lo único (ridículo) que ayudó fue renombrar la siguiente carpeta:

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

Aparentemente está relacionado con archivos antiguos que Homebrew instaló y ahora está roto.

Vladik Y
fuente
-1

@JL Peyret tiene razón!

si tienes macos 10.14.6 Mojave, Xcode 11.0+

luego

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

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

usuario6821154
fuente
¿No debería ser esto un comentario?
Franklin Yu