Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

676
Views
No puedo compilar un programa C en una Mac después de actualizar a Catalina 10.15

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 ?

over 4 years ago · Santiago Trujillo
16 answers
Answer question

0

TL;RD

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.

Exploraciones

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.

Cuando todo lo demás falla, lea el manual

Siguiente paso: busque y lea las notas de la versión:

  • Notas de la versión de Xcode 11
  • Notas de la versión de macOS Catalina 10.15

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

over 4 years ago · Santiago Trujillo Report

0

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/include
over 4 years ago · Santiago Trujillo Report

0

Antes de continuar, asegúrese de instalar las herramientas de línea de comandos de xcode.

 xcode-select --install

En 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 exists

totalmente bien para ignorar. eso es todo.

over 4 years ago · Santiago Trujillo Report

0

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 usr
over 4 years ago · Santiago Trujillo Report

0

La 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

over 4 years ago · Santiago Trujillo Report

0

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

y 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.sdk
over 4 years ago · Santiago Trujillo Report

0

Intenté 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.9
over 4 years ago · Santiago Trujillo Report

0

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

over 4 years ago · Santiago Trujillo Report

0

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'
over 4 years ago · Santiago Trujillo Report

0

Respuesta corta

 /Library/Developer/CommandLineTools/usr/bin/clang++ -o main main.cpp -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk

El resultado

Explicación

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

over 4 years ago · Santiago Trujillo Report

0

En mi caso, hice un millón de cosas, pero creo que los siguientes pasos ayudaron a solucionar la instalación de Ruby.

  1. xcode-select --install
  2. Establecer estas banderas
 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
  1. sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/* /usr/local/include/

  2. export SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk

  3. rbenv install 2.6.3 -v

over 4 years ago · Santiago Trujillo Report

0

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.

over 4 years ago · Santiago Trujillo Report

0

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.

over 4 years ago · Santiago Trujillo Report

0

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

over 4 years ago · Santiago Trujillo Report

0

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.sdk
over 4 years ago · Santiago Trujillo Report

0

La solución fue más sencilla de lo que pensaba. Instale clang/llvm.

 brew install llvm

Entonces 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##*/}"; done

Y

 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
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!