2012-03-29 8 views
2

Ich habe gerade GCC 4.7 mit stdatomic.h arbeiten, aber ich kann nicht scheinen -I es. stdatomic.h scheint in /usr/include/c++/4.4.3 zu leben, aber dann sagt mir der Linker, es braucht eine Menge anderer Dateien in Dirs in der Nähe. Wenn ich alle -I alle, bekomme ich immer noch den Fehler undefined reference to atomic_flag_clear_explicit. Irgendwelche Ideen wie ich das richtig verlinken soll?GCC 4.7, einschließlich <stdatomic.h>

+0

Hat das 4.7 Quellpaket nicht auch ein 4.7 libstdC++? –

+0

Oh, ich verstehe, du meinst, ich könnte mit dem falschen Include verlinken? Lass mich sehen. –

+0

@ K.G. '' ist Standard C, nicht C++. –

Antwort

2

Erstens, wenn Sie mit GCC 4.7 kompilieren, sollten Sie nichts aus einem Verzeichnis von GCC 4.4 enthalten oder verknüpfen.

Zweitens betrifft -I nur den Suchpfad für Header-Dateien. "undefined reference" ist ein Linker-Fehler und bedeutet normalerweise, dass er nicht die richtige Bibliothek gefunden hat. Sie ändern den Bibliothekssuchpfad mit -L. Der Linker hat nicht gesagt, dass er keine Bibliothek mit dem richtigen Namen gefunden hat. Er sagt, dass er kein Symbol gefunden hat, also hat die Bibliothek, die er gefunden hat, dieses Symbol nicht. Ich schlage vor, dass Sie ein Versionierungsproblem haben, das möglicherweise auf ein Installationsproblem zurückzuführen ist.

2

Der Header < stdatomic.h> in GCC 4.4 und 4.5 stammt aus einem frühen Entwurf von C++ 0x atomics, ist aber nicht Teil des endgültigen Standards, also wurde er aus libstdC++ entfernt.

Der C++ - Compiler unterstützt C++ 11 Atomics über die C++ 11 < Atomic> Header, also sollten Sie diese Header in C++ Code verwenden.

Wenn der C-Compiler C11-Atomics unterstützt, wird der Header < statomic.h> erneut bereitgestellt.