6 Stimmen

g++ schlägt auf mysteriöse Weise nur fehl, wenn sich eine .h in einem bestimmten Verzeichnis befindet

Ich bin ein extrem seltsames Problem in einem frischen OSX 10.4.11 + Xcode 2.5 Installation erleben. Ich habe es auf einen minimalen Testfall reduziert. Hier ist test.cpp:

#include "macros.h"

int main (void)
{
    return 1;
}

Und hier ist macros.h:

#ifndef __JUST_TESTING__
#define __JUST_TESTING__

template<typename T> void swap (T& pT1, T& pT2)
{
    T pTmp = pT1;
    pT1 = pT2;
    pT2 = pTmp;
}

#endif //__JUST_TESTING__

Dies kompiliert und funktioniert einwandfrei, wenn sich beide Dateien im selben Verzeichnis befinden. JEDOCH, wenn ich macros.h in /usr/include/gfc2 ablege (es ist Teil einer benutzerdefinierten Bibliothek, die ich verwende) und das #include in test.cpp ändere, schlägt die Kompilierung mit diesem Fehler fehl:

/usr/include/gfc2/macros.h:4: error: template with C linkage

Ich habe diesen Fehler recherchiert und die meisten Kommentare deuten auf ein "dangling extern C" hin, was überhaupt nicht der Fall zu sein scheint.

Ich bin hier völlig ratlos. Nimmt g++ aus irgendeinem Grund an, dass alles in /usr/include/gfc2 C ist, obwohl es in einer .cpp-Datei enthalten ist, in der nirgends extern "C" steht?

Irgendwelche Ideen?

EDIT : Es wird kompiliert, wenn ich den vollständigen Pfad in der #include , d.h. #include "/usr/include/gfc2/macros.h"

EDIT2 : Es ist nicht die falsche Kopfzeile enthalten. Ich habe dies überprüft mit cpp , g++ -E und Umbenennung macros.h a foobarmacros.h

0voto

Grant Limberg Punkte 20123

Ich stieß gerade auf dieses Problem, als ich ein C++-Projekt kompilierte, das wir normalerweise auf 10.5 und 10.6 (Xcode 3.0+) auf einer 10.4 PPC-Maschine mit installiertem Xcode 2.5 erstellen. Es sieht so aus, als ob der Präprozessor alles, was dem gcc-Include-Pfad mit '-isystem' hinzugefügt wird, so behandelt, als ob es "extern C" sein sollte. Das Ändern von '-isystem' in '-I' hat das Problem behoben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X