Compile el programa C usando el compilador c (clang) que viene con macOS
- La cadena de herramientas del compilador de c que viene con macOS es LLVM / Clang, no gcc. Si compara
/usr/bin/gcc
y/usr/bin/clang
continúa ,ls -l
encontrará que los dos son del mismo tamaño. De hecho, porque gcc es solo un alias de clang bajo el último macOS (13+). - Si
clang
desea utilizar el sistema, primero debe instalar el SDK. Para decirlo sin rodeos, debe instalar xcode yxcode-select --install
¿Dónde está el archivo de encabezado c / cpp?
- Si descarga una versión específica de llvm / clang en el sitio web oficial y la utiliza, el clang compilado no compilará el programa c normal,
fatal error: 'stdio.h' file not found
y tales problemas ocurrirán . - En términos generales, cuando ve un error de este tipo y se da cuenta de que no se puede encontrar el archivo de encabezado, ¿dónde está ese archivo de encabezado? Y no es tan común en las distribuciones de Linux
/usr/include
debajo de ella? - A través del clang incorporado, puede ver dónde busca el compilador normalmente compilado los archivos de encabezado durante la compilación y la vinculación (idea de prueba de diferencias), y
clang -x c -E - -v < /dev/null
ver a través de la línea de comandos-x c
,-x c++
Trate la entrada como un archivo de lenguaje C y trate la entrada como C ++-E
, Ejecutar solo el preprocesamiento (¿qué es el preprocesamiento? Expande intuitivamente los archivos de encabezado y las macros)-
, Una sola línea horizontal indica salida a stdout (salida estándar)</dev/null
, archivo especial para Unix, que indica un agujero sin fondo, como entrada aquí
- Al observar el sonido del sistema y la versión específica del sonido compilada por usted mismo, encontrará la diferencia
ignoring nonexistent directory
Información a tener en cuenta- La conclusión es que los archivos de encabezado estándar de la biblioteca c / cpp no están en
/usr/include
- Se dice que en
/usr/local/include
la próxima, no es correcto, ya que ells /usr/local/include | grep stdio
hallazgo no quería archivo
- El archivo de encabezado está realmente en el SDK, por lo que primero debe
xcode-select --install
- Presta atención
#include <...> search starts here:
a la información ahora mismo
- Presta atención
Entonces, si usa el clang compilado del código fuente para compilar el programa C, ¿cómo debe resolver el problema del archivo de encabezado?
- Opciones más:
-isysroot `xcrun--show-sdk-path`
- Tales como:
clang -isysroot `xcrun--show-sdk-path` hello.c -o hello
- Ejecutar solo
xcrun --show-sdk-path
encontrará una salida de ruta, y puede adivinar la ruta del SDK de un vistazo (siempre que la usexcode-select --install
)
- Tales como:
C ++ es igual, así que no entraré en detalles aquí.
Fuente de inspiración: http://lists.llvm.org/pipermail/llvm-dev/2016-July/102044.html