7 votos

Error de compilación con Mojave: error: '_Atomic' no nombra un tipo

Después de actualizar a Mojave 10.14.4 y Xcode 10.2, no consigo compilar GCC 8.3.0. El mensaje de error es

In file included from /usr/include/sys/sysctl.h:83,
                 from ../../gcc-8.3.0/gcc/config/darwin-driver.c:30:
/usr/include/sys/ucred.h:94:2: error: ‘_Atomic’ does not name a type
  _Atomic u_long          cr_ref;  /* reference count */
  ^~~~~~~

No he encontrado ninguna pista de cómo se puede arreglar esto. La cabecera en cuestión es

struct ucred {
    LIST_ENTRY(ucred)       cr_link; /* never modify this without KAUTH_CRED_HASH_LOCK */
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_ATOMICS__)
    _Atomic u_long          cr_ref;  /* reference count */
#elif defined(__cplusplus) && __cplusplus >= 201103L
    _Atomic u_long          cr_ref;  /* reference count */   // <--- this line
#else
    volatile u_long         cr_ref;  /* reference count */
#endif

Cualquier idea será muy apreciada.

0 votos

Estaba escribiendo una respuesta para usted cuando esto quedó en suspenso: "Necesitas usar un compilador compatible con C11 para tener soporte para la palabra clave _Atomic. Asegúrese de que está compilando con un compilador reciente y moderno, y que STDC_NO_ATOMICS no está definido. "

1 votos

@nohillside Esta no es una pregunta de desarrollo de software. Se trata de un usuario que intenta instalar GCC 8.3.0 compilando el software - no un usuario que intenta desarrollar un nuevo software.

0 votos

Cómo está compilando gcc. La forma más fácil es usar macports o homebrew. Si no quiere hacer eso, al menos vea cómo han conseguido que la compilación funcione.

5voto

Zac Puntos 61

Yo también me encontré con el mismo problema. El error es reportado por g++, un compilador de C++. En MacOS 10.14.4, el archivo de cabecera <sys/ucred.h> utiliza el _Atomic para C++, aunque sólo está definida en el estándar C. (Supongo que el compilador de Apple clang++ define esta palabra clave como una extensión del estándar C++).

La solución adecuada es decirle a gcc que "fixinclude" el archivo de cabecera <sys/ucred.h> . Este parche hace esto. Este es un parche que debe aplicarse al código fuente de GCC 8.3.0 antes de construirlo.

0 votos

Muchas gracias, ¡esto arregla la construcción! Si el mismo truco se hace también en el código del sanitizador, también podría construir GCC desde el tronco.

1voto

Jose Chavez Puntos 645

Es necesario utilizar un compilador compatible con C11 para tener soporte para la palabra clave _Atomic.

Asegúrese de que está compilando con un compilador reciente y moderno, y que STDC_NO_ATOMICS no está definido.

Puede que te resulte más fácil utilizar HomeBrew para compilarlo sin tener que configurar nada tú mismo. Después de instalar HomeBrew, puedes instalar gcc con:

brew install gcc

0 votos

Estoy usando la versión 10.0.1 de Apple LLVM (clang-1001.0.46.3) que debería ser compatible con C11. No define STDC_NO_ATOMICS .

0 votos

Quiero compilar GCC yo mismo, porque las últimas versiones no siempre están disponibles en Homebrew. Además, esto solía funcionar, y me gustaría arreglarlo :)

0 votos

Me encuentro con este mismo problema que OP y homebrew falla con el mismo error.

-1voto

hipplar Puntos 3185

Tuve el mismo problema y encontré una solución aquí .

MacOS Mojave cambió la ubicación de las cabeceras del sistema, esto rompió el proceso de construcción de GCC 8. Para construir GCC instale los archivos de cabecera necesarios en la antigua ubicación:

La solución es instalar el paquete que se encuentra en el siguiente directorio.

/Library/Developer/CommandLineTools/Packages/

0 votos

Lo he hecho, pero no soluciona el problema descrito. La respuesta de apple.stackexchange.com/a/355103/325679 soluciona el problema.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X