Kompilierungsfehler: ist nicht implementiert

Wenn ich ein Open-Source-Programm namens gate mit "make" kompiliere, bekomme ich diese Fehlermeldung:

Fehler <atomar> ist nicht implementiert

Ich muss hinzufügen, dass ich dieses Programm kenne und es zuvor mehrmals ohne Probleme kompiliert habe

Mein Setup sieht so aus:

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

Ich laufe auf Yosemite 10.10.5, xcode 7.1.1 und habe mehrere Zusammenstellungen mit Clang und gcc ausprobiert

Willkommen bei Ask Different. Könnten Sie zwei Dinge ausführen und den Beitrag mit den Details bearbeiten? Ich werde Ihren Beitrag mit den Befehlen bearbeiten, Sie können als Nächstes die Ergebnisse eingeben ... Möglicherweise müssen Sie auch diesen make-Befehl anzeigen, um uns die Flags mitzuteilen und/oder wenn er darauf hinweist, dass eine bestimmte Header-Datei fehlt oder nicht gefunden werden kann .
Danke bmike. xcode-select --install war fertig. gcc -v ergibt: 'Konfiguriert mit: --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) Ziel: x86_64-apple-darwin14.5.0 Thread-Modell: posix'. Ich habe versucht, den letzten Check aus llvm herauszuholen und laut diesem Post zu klirren . Ich warte auf die Ergebnisse und sage es Ihnen morgen
Perfekt. Bitte bearbeiten Sie den Körper mit Ihren Ergebnissen und @pingen Sie mich dann - dieses Tool sieht sehr gut aus, also hoffe ich, dass wir Ihnen eine Antwort geben können und es wieder läuft.
Nun ... Es funktioniert nicht. Manchmal habe ich das Gefühl, ich sollte keinen Computer mehr anfassen :-) Ich habe llvm lokal (in /Applications/) installiert und eine ausführbare Datei namens build/bin/clang-3-8 als Compiler gefunden. Also habe ich mein Programm mit ccmake und mit clang-3-8 als C- und C++-Compiler kompiliert. Es schlägt nach 1% fehl mit der Meldung "iostream konnte nicht gefunden werden".
OK - wir kommen (langsam) voran - die Compiler scheinen nicht alles zu haben, was sie brauchen. Sie sollten tatsächlich nichts installieren müssen, wenn Sie zwei oder drei Compiler haben, ist es problematisch festzustellen, welcher verwendet wird. Ich werde eine Antwort geben, wie wir weiter vorgehen können, aber Sie müssen möglicherweise genau die beiden Antworten posten - Wort für Wort an die sudo xcode-select --installund which gccdamit ich meine Antwort auf Ihre Situation zuschneiden kann.
Anstatt Ihr Feedback zur Antwort hinzuzufügen, fügen Sie bitte einen Kommentar entweder unter der Antwort oder (wenn Sie dort nicht kommentieren können) unter Ihrer Frage ein (und pingen Sie erneut @bmike).

Antworten (2)

Wenn Sie sich die Frage, die Änderungen und die Kommentare ansehen, wird deutlich, dass die Einrichtung Ihrer Compilerkette und der Header wahrscheinlich die Ursache ist. Sie könnten weiterhin versuchen, Dinge hinzuzufügen, aber ich würde einen anderen Weg einschlagen:

  1. Erstellen Sie eine vollständige Sicherung des Mac – eine, die Sie ernsthaft verwenden möchten, wenn Sie den Computer löschen und eine Testkompilierung des Programms ausführen und dann entweder die vollständige Sicherung oder Dateien, die Sie benötigen, selektiv aus der Sicherung wiederherstellen.
  2. Entfernen Sie Xcode und entfernen Sie alle Compiler, die Sie heruntergeladen und installiert haben.
  3. Installieren Sie ein Tool zur Unterstützung bei der Wartung und Installation des Compilers und der erforderlichen Header-Bibliotheksdateien für den neuesten C++-Standard.

Das von mir verwendete Tool ist Homebrew, Sie können es also über https://brew.sh installieren

  1. brew update
  2. brew doctor- und stellen Sie sicher, dass Sie alle Ratschläge des Arztes befolgen oder hier um Rat fragen
  3. brew install gcc

Hier ist das Testprogramm, das ich für einen "minimalen Testfall" verwendet habe

#include<atomic>
#include<iostream>

using namespace std;

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

Bevor ich die "Brew" -Version von gcc verwende, erhalte ich vermutlich den gleichen Fehler wie Sie:

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

Aber wenn ich es mit "brew installed gcc" kompiliere, erhalte ich eine sehr schöne detaillierte Meldung

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. Zeigen Sie Ihren Compiler auf g++5
  2. Löschen Sie andere Compiler nach Bedarf (einschließlich Xcode möglicherweise)
  3. Hinzufügen der Kompilieroption -std=c++11
Gibt es eine Möglichkeit, dies zu einer globalen Einstellung zu machen?

Hatte das gleiche Problem mit xCode 6.4. Bei der Verwendung von Atomic in einem einfachen helloWorld-Programm hat es funktioniert, aber bei der Verwendung eines von CMake generierten Projekts hatte ich die Meldung "#Fehler ist nicht implementiert".

Es scheint, dass CMake spezielle Flags benötigt, um c ++ 11 auf Mac zu aktivieren ... Also, habe genau (fast ... if (UNIX) durch if (APPLE) ersetzt), wie Kitware hier anzeigt:

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

Falls der Link eines Tages nicht mehr funktioniert....

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