Acabo de actualizar a Mojave desde High Sierra e instalé Xcode más sus herramientas de línea de comandos y herramientas adicionales. Nada se compilará desde la terminal, ¡todo dice que falta /usr/include!
¡Revisé y faltan TODOS los directorios relacionados con Dev en /usr!
¿Alguna idea de cómo arreglarlo?
Agregue el -isysroot
indicador a sus indicadores de compilación para incluir automáticamente el directorio de encabezado del SDK adecuado y evitar la necesidad del /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
paquete que "en una versión futura,... ya no se proporcionará".
Ejemplos:
-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk
o
-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk
Puede usar xcrun --show-sdk-path
para encontrar la ruta SDK predeterminada.
También puede usar las versiones /usr/bin/ instaladas de Xcode o CommandLineTools de clang, clang++, cc, c++, gcc, g++, que son shims que llaman para invocar la herramienta correcta xcrun
con el SDK actual e incluir directorios. El valor predeterminado es CommandLineTools si lo tiene instalado.
Puede cambiar el comportamiento para usar Xcode:
$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
o cambiar de nuevo:
$ sudo xcode-select -s /Library/Developer
Debe ejecutar otro paso después de instalar las herramientas de línea de comandos:
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
¿Por qué? Apple ha introducido un nuevo baile de herramientas de compilación: las inclusiones del sistema ahora solo se mantienen en la ruta de un SDK específico con Xcode 10 en adelante :
El paquete de herramientas de línea de comandos instala los encabezados del sistema macOS dentro del SDK de macOS. El software que se compila con las herramientas instaladas buscará encabezados dentro del SDK de macOS [...] proporcionado por Xcode [...] o las herramientas de línea de comandos [...] dependiendo de cuál se seleccione usando xcode-select.
[...]
Las herramientas de la línea de comandos buscarán en el SDK los encabezados del sistema de forma predeterminada. Sin embargo, es posible que algún software no se compile correctamente con el SDK y requiera que los encabezados de macOS se instalen en el sistema base en
/usr/include
[énfasis agregado]. Si usted es el mantenedor de dicho software, lo alentamos a que actualice su proyecto para que funcione con el SDK o presente un informe de error para los problemas que le impiden hacerlo. Como solución alternativa, se proporciona un paquete adicional que instalará los encabezados en el sistema base. En una versión futura, este paquete ya no se proporcionará. Puedes encontrar este paquete en:/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
Para asegurarse de que está utilizando la versión deseada de las herramientas de la línea de comandos, ejecute
xcode-select -s <path to Xcode>
oxcode select -s /Library/Developer/CommandLineTools
después de la instalación.
sudo
para que este comando funcioneEl "por qué" se debe a que Apple ha desaprobado tener un /usr/include distinto del SDK. No debe confiar en tenerlo en el futuro.
Los compiladores ya saben que deben encontrar sus inclusiones dentro del SDK, por lo que ya no hay una necesidad real del directorio /usr/include. Puede encontrar el directorio de instalación del SDK para los archivos de inclusión usandoxcrun --show-sdk-path
zlib_places="/usr/local /usr /opt/local /sw"
allí)
ay
-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
si solo desea usar el valor predeterminado. Sin embargo, en la mayoría de los casos, probablemente deba investigar por qué el compilador de C que está usando no detecta los indicadores correctos (probablemente debería estar usandoclang
desde el SDK en lugar de lo que sea que esté usando).