7 votes

Erreur de compilation avec Mojave : erreur : '_Atomic' ne nomme pas un type

Après la mise à jour vers Mojave 10.14.4 et Xcode 10.2, je ne parviens pas à compiler GCC 8.3.0. Le message d'erreur est le suivant

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 */
  ^~~~~~~

Je n'ai pas trouvé d'indice sur la façon dont cela peut être corrigé. L'en-tête en question est

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

Toutes les idées sont les bienvenues !

5voto

Erik Schnetter Points 166

J'ai moi-même rencontré le même problème. L'erreur est en fait signalée par g++, un compilateur C++. Sous MacOS 10.14.4, le fichier d'en-tête <sys/ucred.h> utilise le _Atomic pour le C++, bien qu'il ne soit défini que dans la norme C. (Je suppose que le compilateur d'Apple clang++ définit ce mot-clé comme une extension de la norme C++).

La bonne solution consiste à demander à gcc de "fixinclude" le fichier d'en-tête <sys/ucred.h> . Ce correctif fait ceci. Il s'agit d'un correctif qui doit être appliqué au code source de GCC 8.3.0 avant de le compiler.

1voto

Jose Chavez Points 645

Vous devez utiliser un compilateur compatible C11 pour que le mot-clé _Atomic soit pris en charge.

Assurez-vous que vous compilez avec un compilateur récent et moderne, et que STDC_NO_ATOMICS n'est pas défini.

Il pourrait être plus facile pour vous d'utiliser HomeBrew afin de le compiler sans avoir à configurer quoi que ce soit vous-même. Après avoir installé HomeBrew, vous pouvez installer gcc avec :

brew install gcc

-1voto

hipplar Points 3185

J'ai eu le même problème et j'ai trouvé une solution ici .

MacOS Mojave a modifié l'emplacement des en-têtes du système, ce qui a interrompu le processus de construction de GCC 8. Afin de construire GCC, installez les fichiers d'en-tête requis dans l'ancien emplacement :

La solution est d'installer le paquet qui se trouve dans le répertoire suivant.

/Library/Developer/CommandLineTools/Packages/

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X