Hay una pregunta anterior No se puede compilar el programa C en una Mac después de actualizar a Mojave , y las respuestas han cubierto la mayoría de las variaciones sobre lo que sale mal.
Ahora, a partir del lunes 2019-10-07, puede actualizar a macOS Catalina 10.15. Una vez más, durante la actualización, el directorio /usr/include ha sido superado por la actualización, a pesar de que se instaló XCode 11.0 antes de actualizar (desde Mojave 10.14.6) a Catalina. En consecuencia, los compiladores creados para esperar que haya un directorio /usr/include ya no funcionan.
El principal paso recomendado para los problemas de Mojave: usar el comando:
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
no funciona desde el principio porque el directorio /Library/Developer/CommandLineTools/Packages/ no existe (por lo que aún no hay un archivo .pkg para abrir).
¿Existe una buena forma (oficial) de crear y completar el directorio /usr/include ?
Parece que Apple considera /usr/include como algo que ha seguido el camino del dodo (está extinto) o tal vez es como el loro de Monty Python.
Usar el GCC proporcionado por Apple (en realidad, ese es Clang con cualquier otro nombre, como muestra la información de la versión) o Clang evita problemas. Tanto /usr/bin/gcc como /usr/bin/clang encontrarán las bibliotecas del sistema cuatro niveles de directorio a continuación:
/Applications/Xcode.app/Contents/Developer/Platforms/…Si construye su propio GCC u otro compilador, (probablemente) necesitará configurarlo para encontrar las bibliotecas del sistema en el directorio de la aplicación Xcode.
Inmediatamente después de la actualización, ejecuté XCode 11.0. Quería instalar algunos componentes adicionales, así que lo dejé hacerlo. Sin embargo, eso no restableció /usr/include o el directorio bajo /Library .
Uno de los otros consejos de la pregunta anterior fue ejecutar:
xcode-select --install
Al hacerlo, afirmó que descargó las utilidades de la línea de comandos y se aseguró de que /usr/bin/gcc y /usr/bin/clang , etc. estuvieran presentes. Ese es un paso útil (aunque definitivamente no verifiqué si estaban presentes antes).
$ /usr/bin/gcc --version Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1 Apple clang version 11.0.0 (clang-1100.0.33.8) Target: x86_64-apple-darwin19.0.0 Thread model: posix InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin $ Usando /usr/bin/gcc , ahora es posible compilar programas:
$ make CC=/usr/bin/gcc al co RCS/al.c,v al.c RCS/al.c,v --> al.c revision 1.7 done /usr/bin/gcc -I/Users/jleffler/inc -g -O3 -std=c11 -pedantic -Wall -Wextra -Werror -Wshadow -Wmissing-prototypes -Wpointer-arith -Wold-style-definition -Wcast-qual -Wstrict-prototypes -DHAVE_MEMMEM -DHAVE_STRNDUP -DHAVE_STRNLEN -DHAVE_GETDELIM -o al al.c -L/Users/jleffler/lib/64 -ljl $ Sin embargo, todavía falta /usr/include . Hay un directorio debajo /Library ahora:
$ ls /Library/Developer CommandLineTools PrivateFrameworks $ ls /Library/Developer/CommandLineTools Library SDKs usr $ ls /Library/Developer/CommandLineTools/SDKs MacOSX.sdk MacOSX10.14.sdk MacOSX10.15.sdk $ ls /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/ Entitlements.plist SDKSettings.json System Library SDKSettings.plist usr $ Ni el directorio del System ni el de la Library contienen nada muy prometedor.
Siguiente paso: busque y lea las notas de la versión:
No hay información allí que se relacione con esto. Por lo tanto, la probabilidad es (AFAICS, después de solo una hora o dos de esfuerzo) que Apple ya no admita /usr/include , aunque todavía tiene /usr/lib completamente cargado (aunque no /lib ).
Es hora de verificar otra compilación con la opción GCC -v agregada (en el archivo MAKE que utilicé, configurar UFLAGS agrega la opción a la línea de comando del compilador C):
$ make UFLAGS=-v CC=/usr/bin/gcc ww co RCS/ww.c,v ww.c RCS/ww.c,v --> ww.c revision 4.9 done /usr/bin/gcc -I/Users/jleffler/inc -g -O3 -std=c11 -pedantic -Wall -Wextra -Werror -Wshadow -Wmissing-prototypes -Wpointer-arith -Wold-style-definition -Wcast-qual -Wstrict-prototypes -DHAVE_MEMMEM -DHAVE_STRNDUP -DHAVE_STRNLEN -DHAVE_GETDELIM -v -o ww ww.c -L/Users/jleffler/lib/64 -ljl Apple clang version 11.0.0 (clang-1100.0.33.8) Target: x86_64-apple-darwin19.0.0 Thread model: posix InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.15.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -disable-free -disable-llvm-verifier -discard-value-names -main-file-name ww.c -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -fno-strict-return -masm-verbose -munwind-tables -target-sdk-version=10.15 -target-cpu penryn -dwarf-column-info -debug-info-kind=standalone -dwarf-version=4 -debugger-tuning=lldb -ggnu-pubnames -target-linker-version 512.4 -v -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -I /Users/jleffler/inc -D HAVE_MEMMEM -D HAVE_STRNDUP -D HAVE_STRNLEN -D HAVE_GETDELIM -I/usr/local/include -O3 -Wall -Wextra -Werror -Wshadow -Wmissing-prototypes -Wpointer-arith -Wold-style-definition -Wcast-qual -Wstrict-prototypes -Wno-framework-include-private-from-public -Wno-atimport-in-framework-header -Wno-extra-semi-stmt -Wno-quoted-include-in-framework-header -pedantic -std=c11 -fdebug-compilation-dir /Users/jleffler/src/cmd -ferror-limit 19 -fmessage-length 110 -stack-protector 1 -fstack-check -mdarwin-stkchk-strong-link -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fobjc-runtime=macosx-10.15.0 -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -vectorize-loops -vectorize-slp -o /var/folders/77/zx9nk6dn7_dg4xd4stvt42v00000gn/T/ww-4cb85b.o -xc ww.c clang -cc1 version 11.0.0 (clang-1100.0.33.8) default target x86_64-apple-darwin19.0.0 ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/local/include" ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/Library/Frameworks" #include "..." search starts here: #include <...> search starts here: /Users/jleffler/inc /usr/local/include /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/include /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory) End of search list. "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -arch x86_64 -macosx_version_min 10.15.0 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -o ww -L/Users/jleffler/lib/64 /var/folders/77/zx9nk6dn7_dg4xd4stvt42v00000gn/T/ww-4cb85b.o -ljl -L/usr/local/lib -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.osx.a "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/dsymutil" -o ww.dSYM ww $La información clave en esa tormenta de datos es:
-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk Ese es efectivamente el directorio 'raíz' para la compilación, por lo que debería haber subdirectorios debajo para usr y usr/include :
$ ls /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk Entitlements.plist SDKSettings.json System Library SDKSettings.plist usr $ ls /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr bin include lib libexec share $ ls /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include AppleTextureEncoder.h dns_util.h memory.h simd AssertMacros.h dtrace.h menu.h slapi-plugin.h Availability.h editline miscfs spawn.h AvailabilityInternal.h err.h module.modulemap sqlite3.h AvailabilityMacros.h errno.h monetary.h sqlite3ext.h AvailabilityVersions.h eti.h monitor.h stab.h …lots more lines… dirent.h mach-o security xcselect.h disktab.h mach_debug semaphore.h xlocale dispatch machine servers xlocale.h dlfcn.h malloc setjmp.h xpc dns.h math.h sgtty.h zconf.h dns_sd.h membership.h signal.h zlib.h $Esto muestra que el nombre de directorio de una milla de largo y totalmente anodino contiene los encabezados estándar C y POSIX, además de extras específicos de Apple.
El directorio /usr/local/ anterior parece estar intacto; la advertencia sobre la no existencia de usr/local/include bajo -isysrootdir es inofensiva (y no es visible sin la opción -v ).
Para mí, agregar la siguiente ruta a CPATH resolvió el problema:
export CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/includeAntes de continuar, asegúrese de instalar las herramientas de línea de comandos de xcode.
xcode-select --installEn realidad, ¡tú puedes hacerlo! En realidad, todos los encabezados C se encuentran aquí en esta carpeta:
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/Solo necesitamos crear un enlace simbólico para todos los archivos de encabezados en esta carpeta:
/usr/local/include/¡Funcionó para mí! la siguiente línea de comando se encargará de todos los problemas:
sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/* /usr/local/include/Recibirás alguna advertencia. Algunos de los encabezados ya existen, como este:
ln: /usr/local/include//tcl.h: File exists ln: /usr/local/include//tclDecls.h: File exists ln: /usr/local/include//tclPlatDecls.h: File exists ln: /usr/local/include//tclTomMath.h: File exists ln: /usr/local/include//tclTomMathDecls.h: File exists ln: /usr/local/include//tk.h: File exists ln: /usr/local/include//tkDecls.h: File exists ln: /usr/local/include//tkPlatDecls.h: File existstotalmente bien para ignorar. eso es todo.
Establezca las siguientes variables Make implícitas para señalar dónde se encuentran ahora los encabezados para las herramientas de línea de comandos de Xcode (Xcode CLI):
export CFLAGS+=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk export CCFLAGS+=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk export CXXFLAGS+=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk export CPPFLAGS+=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk La opción -isysroot actualiza la ubicación de los archivos raíz lejos del directorio raíz del sistema / .
Por lo tanto, esto garantiza que los archivos comunes /usr/* se encuentren en su nuevo lugar.
Es decir, ahora se encuentran los archivos en /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk . Estos archivos son:
Entitlements.plist Library SDKSettings.json SDKSettings.plist System usrLa dependencia apue.h todavía faltaba en mi /usr/local/include después de seguir la respuesta de Komol Nath Roy en esta pregunta.
Descargué la dependencia manualmente desde git y la coloqué en /usr/local/include
Soy un novato con el compilador C ++ para R en OSX y tuve el mismo problema de que C ++ no pudo encontrar el encabezado después de que se actualizó el sistema operativo ( me faltaba math.h aunque estaba allí ). Seguí las instrucciones de https://thecoatlessprofessor.com/programming/cpp/r-compiler-tools-for-rcpp-on-macos/ pero nada cambió.
Finalmente, funcionó para mí después de reinstalar la CLI de Xcode
xcode-select --instally luego cambie las banderas a Var como sugirió @Coatless:
export CFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk export CCFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk export CXXFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk export CPPFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdkIntenté 1) vincular manualmente 2) brew install llvm, pero no funcionaron.
Finalmente, esto funcionó para mí: https://gitmemory.com/issue/pytorch/pytorch/31190/565153503
Al configurar los siguientes env vars:
export CC=clang export CXX=clang++ export MACOSX_DEPLOYMENT_TARGET=10.9En mi caso, parecía tener llvm y gcc también instalados usando homebrew. Cuando los eliminé y, por lo tanto, confié completamente en macOS Clang, pudo encontrar los encabezados y la compilación funcionó nuevamente.
En MacOS Catalina 10.15.4, con Xcode versión 11.5 (11E608c), también necesitaba actualizar la ruta de la biblioteca en mi .zshrc (las rutas de MacOSX.sdk son nuevas):
export CPATH='/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include:/opt/local/include' export LIBRARY_PATH='/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib:/opt/local/lib' /Library/Developer/CommandLineTools/usr/bin/clang++ -o main main.cpp -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk En la versión actual de macOS, los encabezados c/c++ se buscan dentro de /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/ , en lugar de /usr/include . Entonces necesita 'restablecer' el directorio raíz usando la opción -isysroot .
Espero que esto tenga sentido 🙂.
En mi caso, hice un millón de cosas, pero creo que los siguientes pasos ayudaron a solucionar la instalación de Ruby.
xcode-select --install export CFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk export CCFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk export CXXFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk export CPPFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/* /usr/local/include/
export SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
rbenv install 2.6.3 -v
Si tiene instaladas las herramientas de la línea de comandos y XCode, asegúrese de que el SDK instalado por las herramientas de la línea de comandos se esté utilizando realmente:
#Comprobar el SDK actual
$ xcrun --show-sdk-path
#Cambiar SDK
$ sudo xcode-select -s /Library/Developer/CommandLineTools #Using CommandLineTools SDK
$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer #Using XCode.app SDK
felicitaciones a https://stackoverflow.com/a/61526989/596599 por esta respuesta.
Para mí, el error fue: xcrun[20873:1179298] Failed to open macho file at /Library/Developer/CommandLineTools/usr/bin/clang++ for reading: Too many levels of symbolic links
Así que abrí mi terminal y fui a la siguiente carpeta (como se menciona en el mensaje de error): /Library/Developer/CommandLineTools/usr/bin/
Luego eliminé el archivo de acceso directo llamado clang++
sudo rm clang++ A continuación, hice una copia del archivo ejecutable llamado clang y cambié el nombre del archivo copiado a clang++
sudo cp clang clang++Y finalmente funciona.
Si usa una instalación LLVM externa, agréguelos a su ~/.bash_profile
LLVM_PATH="/usr/local/opt/llvm/" # or any other path LLVM_VERSION="11.0.0" export PATH="$LLVM_PATH:$PATH" export SDKROOT=$(xcrun --sdk macosx --show-sdk-path) export LD_LIBRARY_PATH="$LLVM_PATH/lib/:$LD_LIBRARY_PATH" export DYLD_LIBRARY_PATH="$LLVM_PATH/lib/:$DYLD_LIBRARY_PATH" export CPATH="$LLVM_PATH/lib/clang/$LLVM_VERSION/include/" export LDFLAGS="-L$LLVM_PATH/lib" export CPPFLAGS="-I$LLVM_PATH/include" export CC="$LLVM_PATH/bin/clang" export CXX="$LLVM_PATH/bin/clang++"(ajuste la versión clang y la ruta de instalación externa de llvm).
Luego ejecute source ~/.bash_profile
Para mí, funciona bien de la siguiente manera:
1. xcode-select --install 2. sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/* /usr/local/include/ 3. export SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdkLa solución fue más sencilla de lo que pensaba. Instale clang/llvm.
brew install llvmEntonces necesitamos crear enlaces simbólicos nosotros mismos.
for f in /usr/local/Cellar/llvm/9.0.0_1/bin/clang*; do ln -s ${f} /usr/local/bin/"${f##*/}"; doneY
ln -s /usr/local/Cellar/llvm/9.0.0_1/include/c++ /usr/local/include/c++Dependiendo de su versión de llvm, modifique los comandos anteriores.
Ahora, puede compilar programas C++ sin pasar ningún indicador personalizado.
clang++ hello.cpp