4 votes

erreur de compilation : <atomic> n'est pas implémenté

Lorsque je compile un programme open source appelé porte avec "make" j'ai ce message d'erreur :

erreur <atomique> n'est pas implémenté

Je dois ajouter que je connais ce programme et que je l'ai compilé plusieurs fois auparavant sans aucun problème.

Ma configuration est la suivante :

sudo xcode-select --install 
which gcc
gcc --version

Je travaille sur yosemite 10.10.5, xcode 7.1.1 et j'ai essayé plusieurs compilations avec clang et gcc.

0 votes

Bienvenue à Ask Different. Pourriez-vous faire deux choses et éditer le message avec les détails ? Je vais éditer votre message avec les commandes, vous pourrez entrer les résultats ensuite... Vous pouvez également montrer la commande make pour nous indiquer les drapeaux et/ou si elle indique qu'un fichier d'en-tête spécifique est manquant ou introuvable.

1 votes

Merci bmike. xcode-select --install a été fait. gcc -v donne : 'Configuré avec : --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 7.0.0 (clang-700.1.76) Target : x86_64-apple-darwin14.5.0 Thread model : posix'. J'ai essayé d'obtenir la dernière vérification d'llvm et de clang comme suit poste J'attends les résultats et je vous les communiquerai demain

0 votes

Parfait. Veuillez éditer le corps du texte avec vos résultats et ensuite @ ping me - cet outil a l'air très bien et j'espère que nous pourrons vous donner une réponse et qu'il fonctionnera à nouveau.

1voto

Oskar Points 1242

En examinant la question, les modifications et les commentaires, il devient clair que la configuration de votre chaîne de compilation et des en-têtes en est probablement la cause. Vous pouvez continuer à essayer d'ajouter des éléments, mais j'adopterais une approche différente :

  1. Faites une sauvegarde complète du Mac - une sauvegarde que vous souhaitez vraiment utiliser si vous effacez la machine et lancez une compilation test du programme, puis restaurez soit la sauvegarde complète, soit les fichiers dont vous avez besoin de manière sélective à partir de la sauvegarde.
  2. Supprimez Xcode et tous les compilateurs que vous avez téléchargés et installés.
  3. Installer un outil d'aide à la maintenance et à l'installation du compilateur et des fichiers de bibliothèque d'en-tête nécessaires pour la dernière norme C++.

L'outil que j'utilise est homebrew, vous pouvez donc l'installer par https://brew.sh

  1. brew update
  2. brew doctor - et assurez-vous de suivre les conseils du médecin ou de demander des conseils ici.
  3. brew install gcc

Voici le programme de test que j'ai utilisé pour un "cas de test minimal"

#include<atomic>
#include<iostream>

using namespace std;

int main()
{
    cout << "Hello World" << endl;
}

Avant d'utiliser la version "brew" de gcc, j'obtiens ce que je suppose être la même erreur que vous :

mac:Desktop me$ /usr/bin/gcc gate\ test.cpp
In file included from gate test.cpp:1:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/atomic:543:2: error: <atomic> is not implemented
#error <atomic> is not implemented
 ^
1 error generated.
mac:Desktop me$ which gcc
/usr/bin/gcc

Mais si je le compile en utilisant "brew installed gcc", j'obtiens un très beau message détaillé

mac:Desktop me$ g++-5 gate\ test.cpp 
In file included from /usr/local/Cellar/gcc/5.2.0/include/c++/5.2.0/atomic:38:0,
                 from gate test.cpp:1:
/usr/local/Cellar/gcc/5.2.0/include/c++/5.2.0/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
 #error This file requires compiler and library support for the \
  ^
mac:Desktop me$ g++-5 gate\ test.cpp -std=c++11

TLDR ;

  1. pointer votre compilateur vers g++5
  2. supprimer d'autres compilateurs si nécessaire (y compris Xcode éventuellement)
  3. ajout de l'option de compilation -std=c++11

0 votes

Est-il possible d'en faire un paramètre global ?

1voto

DJFriar Points 153

J'ai eu le même problème avec xCode 6.4. Lorsque j'utilisais atomic dans un simple programme helloWorld, cela fonctionnait, mais lorsque j'utilisais un projet généré par CMake, j'avais le "#error is not implemented"

Il semble que CMake ait besoin de drapeaux spéciaux pour activer c++11 sur mac... J'ai donc fait exactement (presque... remplacé if(UNIX) par if(APPLE)) comme kitware l'indique ici :

https://cmake.org/Wiki/CMake/Tutorials/C%2B%2B11Flags

Au cas où le lien ne fonctionnerait plus un jour....

cmake_minimum_required(VERSION 2.6)

PROJECT(Test)

if(UNIX)
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=gnu++0x")
endif()

# MSVC does not require any special flags

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