No se puede compilar un programa C en una Mac después de actualizar a Catalina 10.15

64

Hay una pregunta anterior No se puede compilar el programa C en una Mac después de actualizar a Mojave , y las respuestas a eso han cubierto la mayoría de las variaciones de 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 /usr/includedirectorio quedó impresionado por la actualización, a pesar de que XCode 11.0 se instaló antes de actualizar (desde Mojave 10.14.6) a Catalina. En consecuencia, los compiladores creados para esperar que haya un /usr/includedirectorio 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 fuera de la puerta porque el directorio /Library/Developer/CommandLineTools/Packages/no existe (por lo que todavía no hay un .pkgarchivo para abrir).

¿Hay una buena forma (oficial) de crear y completar el directorio /usr/include?

Jonathan Leffler
fuente
No necesita /usr/includeusar las herramientas de desarrollador de Apple con el Xcode actual de Apple. Los encabezados y tal están en Xcode.app/Contents/Developer/Platforms/SomePlatform/SDKs/SomeSDK. (Mantener encabezados en diferentes directorios es necesario para admitir múltiples plataformas de destino, y es bueno no /usr/includeasegurarse de que ninguna compilación use accidentalmente archivos de este cuando se dirige a una versión diferente del sistema host). ¿Qué xcode-select -pmuestra la ruta a el directorio de desarrollador activo?
Eric Postpischil
Creé GCC 9.2.0 (en Mojave) y espera poder usarlo /usr/includepara los encabezados del sistema. Todavía me gustaría poder usar eso, aunque sospecho que Apple finalmente ha desechado los últimos vestigios de compatibilidad con los sistemas Unix heredados (hasta cierto punto, la escritura estaba en la pared con el sistema requerido para que Mojave funcionara) '). En ese caso, probablemente tenga que reconstruir GCC especificando la ubicación actual de los encabezados del sistema de alguna manera: ataque manual sobre cómo configurar GCC.
Jonathan Leffler
1
@JonathanLeffler: después de la actualización de Catalina, también enfrento el problema de que faltan algunos archivos (como stdlib.h) que utiliza el paquete de software R al instalar los paquetes de R. Intenté lo mismo que tú para macOS_10.14, pero esto ya no es posible. GCC, c ++ o lo que sea que esté instalado en / Library / Developer / CommandLineTools / usr / bin, pero R no lo sabe. ¿Que puedo hacer?
sebastiann
Desde que actualicé a Catalina hace una semana más o menos, me he convertido en una víctima del notorio problema de 'doble tipeo' en los nuevos teclados Mac, cambié a zsh, cambié de opinión y decidí volver a bash y actualizar a bash5.0, ahora estoy aquí porque no puedo compilar bash5.0. Me pregunto si la respuesta correcta a este problema no es simplemente reducir mis pérdidas y cambiar a Arch.
DryLabRebel
Una forma de evitar el problema es usar los compiladores de Xcode: si están instalados, saben dónde encontrar los encabezados del sistema. La técnica CPATH en la respuesta aceptada también parece funcionar bien. Todavía no he sufrido en una Mac 'doble tipeo' (que yo sepa). Mi iPhone decidió que escribí todo tipo de cosas interesantes, pero hasta ahora, toque madera, mi MacBook Pro ha estado bien.
Jonathan Leffler

Respuestas:

30

Para mí, agregar la siguiente ruta para CPATHresolver el problema:

export CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
Hamid
fuente
Traté de agregar la CPATH; Sin embargo, sigo recibiendo este mismo error. solo tratando de hacer un simple cout << "hola";
Jon Pellant
1
Cuando probé esto, funcionó en una prueba informal con un GCC 9.2.0 construido bajo Mojave usando lo que ahora es Xcode 11.1 - gracias.
Jonathan Leffler
Esto funcionó para mí con GCC 9.2.0_1
Sandeep
55
Si está utilizando las herramientas de línea de comandos en lugar de Xcode.app, useexport CPATH=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/
nalzok el
Una rareza : tengo un código que comenzó#include <stdlib.h>y luego no se pudo compilar quejándose de:In file included from …/usr/include/sys/wait.h:110, —— from …/usr/include/stdlib.h:66, —— from bm.c:27: —— …/usr/include/sys/resource.h:443:9: error: no previous prototype for ‘getiopolicy_np’ [-Werror=missing-prototypes] —— 443 | int getiopolicy_np(int, int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);—— Sin embargo, cuando agrego#include <ctype.h>antes#include <stdlib.h>, se compila OK. Todavía estoy resolviendo lo que esto significa y cómo manejarlo automáticamente.
Jonathan Leffler
48

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

xcode-select --install

En realidad, 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 ocupará 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 ignorarlo. eso es todo.

Roy
fuente
1
Sí, supongo que esto es posible. Gracias por la sugerencia. Realmente no coincide con mis requisitos de 'higiene del sistema' (por ejemplo, esos encabezados duplicados) y la /usr/local/jerarquía de directorios está destinada al software local en lugar del software del sistema. En mi opinión, los encabezados deberían estar /usr/includey Apple solo está siendo un dolor.
Jonathan Leffler
1
Hay una forma de evitarlo, puede funcionar, puedes intentarlo. En modo de recuperación, deshabilite el SIP, luego monte el /modo de escritura. Luego, complete la /usr/includecarpeta. Es porque en 10.15, el sistema se monta como modo de solo lectura. sin deshabilitar el SIP, no podrá montar el volumen del sistema.
Roy
@KomolNathRoy: gracias por tus sugerencias. Esto me funcionó muy bien. Finalmente pude instalar todos mis paquetes deseados en el software estadístico R, porque ningún R encuentra todo lo que necesita para la instalación.
sebastiann
77
Esta solución me funcionó en Catalina 10.15
Matthew Barbara
2
Deshabilitar el SIP no es aceptable para mí, incluso como una medida temporal.
Jonathan Leffler
22

TL; DR

Parece que Apple lo considera /usr/includecomo algo que ha seguido el camino del dodo, está extinto, o tal vez es como el Parrot de Monty Python .

Usar el GCC proporcionado por Apple (en realidad, es Clang con cualquier otro nombre, como lo muestra la información de la versión) o Clang evita problemas. Ambos /usr/bin/gccy /usr/bin/clangencontrarán las bibliotecas del sistema en cuatro niveles de directorio a continuación:

/Applications/Xcode.app/Contents/Developer/Platforms/…

Si crea 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 se restableció /usr/includeo el directorio bajo /Library.

Uno de los otros consejos en la pregunta anterior fue ejecutar:

xcode-select --install

Al hacerlo, alegó que descargó las utilidades de línea de comandos, y se aseguró de que /usr/bin/gccy /usr/bin/clangetc. estaban 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
$

Utilizando /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, /usr/includetodavía falta. Hay un directorio debajo /Libraryahora:

$ 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 Systemni el Librarydirectorio contienen nada muy prometedor.

Cuando todo lo demás falla, lea el manual

Siguiente paso: busca y lee las notas de la versión:

No hay información allí que se relacione con esto. Entonces, la probabilidad es (AFAICS, después de solo una o dos horas de esfuerzo) de que Apple ya no sea compatible /usr/include, aunque todavía tiene una carga completa /usr/lib( /libaunque no ).

Tiempo para verificar otra compilación con la opción GCC -vagregada (en el archivo MAKE que utilicé, la configuración UFLAGSagrega 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 -x c 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 debe haber subdirectorios debajo de eso para usry 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 memorable contiene los encabezados estándar C y POSIX, además de los extras específicos de Apple.

El /usr/local/directorio anterior parece estar intacto; la advertencia sobre usr/local/includeno existir bajo el -isysrootdires inofensiva (y no visible sin la -vopción).

Jonathan Leffler
fuente
Lo siento, no pude seguir tu sugerencia. Recibo el mismo error con la actualización de catalina. Con vscode no pude construir aplicaciones C ++ y wchar.hno encontré un error. Intenté incluir esta carpeta -I / Aplicaciones / Xcode.app / Contenidos / Desarrollador / Plataformas / MacOSX.platform / Developer / SDKs / MacOSX.sdk / usr / include e iam obteniendo otros errores como sobre símbolos faltantes para "error: ningún miembro llamado 'isless' en el espacio de nombres global "
user3279954
Habilitado --verboseen el archivo de tareas y noté que el código vs está mirando la /usr/include/c++/v1/carpeta que ya no existe en catalina. También se agregó la siguiente carpeta junto con la inclusión sdk anterior y ahora funciona. "-I / Library / Developer / CommandLineTools / usr / include / c ++ / v1 /",
user3279954
@trojanfoe: prefiero SCCS pero en 1999 no estaba claro si SCCS iba a funcionar de manera sensata después de Y2K (y no había una buena implementación de código abierto de SCCS que yo supiera), así que me cambié a RCS a regañadientes.
Jonathan Leffler
Wow: D Entonces, ¿cuál es el problema con /usr/includedesaparecer? Siempre fue parte implícita de la ruta de inclusión del compilador, por lo que el usuario nunca necesitó saberlo (aparte de cuando intentaba encontrar dónde se declaró algo). Clang hace lo mismo con su ruta SDK debajo, Xcode.apppor lo que el efecto neto es el mismo.
trojanfoe
1
@trojanfoe: un problema (mi problema principal) con /usr/includeAWOL desaparecido es que si ha creado su propio GCC desde la fuente, probablemente se compiló para encontrar los encabezados del sistema /usr/includey, por lo tanto, las compilaciones fallan. Quiero usar el último GCC y Clang. Estoy feliz de usar el Clang de Apple, pero no estoy feliz de usar el Clang de Apple disfrazado de GCC, no es lo mismo que GCC. Todavía no he elaborado una receta para construir GCC con los encabezados del sistema reubicados. (Creo que --with-native-system-header-dir="${XCODE_HDR}"es parte de la respuesta; sin embargo, no es la respuesta completa)
Jonathan Leffler
7

Establezca las siguientes Makevariables 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 -isysrootopción actualiza la ubicación de los archivos raíz lejos del directorio raíz del sistema /.

Por lo tanto, esto garantiza que los /usr/*archivos comunes se encuentren en su nuevo lugar.

Es decir, /Library/Developer/CommandLineTools/SDKs/MacOSX.sdkahora se encuentran los archivos en . Estos archivos son:

Entitlements.plist 
Library
SDKSettings.json
SDKSettings.plist
System
usr
sin abrigo
fuente
En mis archivos MAKE (y en la mayoría de los otros MAKE que veo), CFLAGSes mucho más complejo que una sola opción: la -isysrootopción debería ser 'además de' las otras configuraciones (muchas otras configuraciones). Puede haber un núcleo de una idea aquí (pase la -isysrootopción y la ubicación debajo /Library/Developer/…), pero necesitaría un poco de pulido antes de que esté listo para el horario estelar.
Jonathan Leffler
@JonathanLeffler Usar en su export CFLAGS+=-isysroot ...lugar funcionará para ese caso de uso. Esta es la única solución que funcionó para mí (en Mojave (10.14) con Catalina (10.15) SDK. No tengo el .pkgarchivo del que todo el mundo habla a pesar de que mi XCode y las herramientas de línea de comandos están actualizadas).
Norswap
@Norswap: hay una gran diferencia entre el uso de CFLAGS=…y CFLAGS+=….
Jonathan Leffler
@JonathanLeffler estuvo de acuerdo. He actualizado la respuesta para usar +=. Gracias @Norswap.
abrigo el
1
¡Alternativamente, he descubierto que establecer SDKROOTel mismo valor de SDK ( /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk) también funcionará para mí!
Norswap
4

Soy un novato con el compilador de C ++ para R en OSX y tuve el mismo problema que C ++ no pudo encontrar el encabezado después de que se actualizó el sistema operativo ( faltan 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 @Coatless sugirió:

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
Nancy
fuente
1

En mi caso, parecía tener llvm y gcctambién lo instalé usando homebrew. Cuando los eliminé y, por lo tanto, me basé completamente en el clang de macOS, pude encontrar los encabezados y la compilación funcionó nuevamente.

frbl
fuente
0

la dependencia de apue.h todavía faltaba en mi /usr/local/includedespués de seguir respuesta de Komol Nath Roy en esta pregunta.

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

Matthew Barbara
fuente
El encabezado apue.hproviene de W Richard Stevens, Stephen A Rago Advanced Programming in the Unix Environment, 3rd Edn 2013. AFAIK, Apple nunca lo proporcionó como encabezado del sistema. (No está en /usr/includemi máquina que todavía ejecuta Mojave). Si alguna vez se instaló /usr/include, probablemente se creó manualmente en lugar de ser proporcionado por Apple. Como tal, debería haberse instalado /usr/local/includeanteriormente.
Jonathan Leffler
Disculpe mi ingenua pregunta, pero acabo de poner mis manos en C ++ esta semana. ¿Las dependencias / encabezados se gestionan manualmente en c ++? en caso afirmativo, ¿debo poner todas las dependencias / encabezados mencionados /usr/include?
Matthew Barbara
1
Q1: más o menos. Depende un poco de lo que quiera decir, pero debe preocuparse por las dependencias y los encabezados de C o C ++ si los encabezados no son estándar en las máquinas con las que está trabajando. Luego viene la pregunta: ¿qué es estándar? Y la mejor respuesta que se puede dar es "depende", y depende de muchos factores, incluida la 'plataforma' (O / S, compilador). Q2 es "No, por lo general no debe poner nada /usr/include" - use /usr/local/includeen su lugar. En general, es más seguro para salir /usr/includey /usr/libsolo, y añadir bajo el material /usr/localen su lugar.
Jonathan Leffler
0

La solución fue más simple de lo que pensaba. Instala 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 llvm, modifique los comandos anteriores.

Ahora, puede compilar programas C ++ sin pasar ningún indicador personalizado.

clang++ hello.cpp
Salil
fuente
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
pfcstyle
fuente