Autor Thema: GCC: Include loop wird nicht aufgelöst  (Gelesen 7180 mal)

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« am: 19. January 2011, 01:34 »
Nabend zusammen,

ich habe ein Problem mit dem GCC.
Ich habe mir einen Spinlock definiert, der recht häufig verwendet wird.
Dieser wird zum Beispiel für meine vmm_contexts verwendet.
Bisher lief alles einwandfrei.
Wenn ich nun aber den vmm_context in meinen PCB eintrage, erhalte ich folgende Ausgabe:
    CC lib/mutex/spinlock.c
In file included from include/process/process.h:38
                        from include/kernel/mutex.h:37
                        from lib/mutex/spinlock.c:35
include/mem/vmm.h:64: Error: expected specifier-qualifier-list before >>spinlock_t<<
Mir ist klar, dass es sich da um eine zirkuläre Abhängigkeit handelt, die er nicht auflösen kann.
Ich frage mich nur, warum es jetzt auf einmal auftaucht.

Wie kann ich das Problem beheben?

Gruß,
rizor
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

DesL

  • Beiträge: 23
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 19. January 2011, 02:39 »
Wieso bist du dir da so sicher das es sich um ein ezirluläre anhängigkeit handelt? ich verstehe das so,
das in der Datei vmm.h die von process.h includier wird, die von mutex.h includiert wird, die von spinlock.c includiert wird in Zeile vermutlich ein struct ohne name verwendet wird, das auf such selber verweist:
typedef struct {
....
spinlock_t lock;
}spinlock_t;
Eine Lösung wäre (wenn dem denn so ist):
typedef struct spinlock_t{
....
spinlock_t lock;
}spinlock_t;

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 19. January 2011, 08:23 »
Nein, der Code funktioniert definitiv, denn wenn ich das include von vmm.h aus der Prozess-Datei und den Context aus dem PCB nehme, funktioniert alles einwandfrei.
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 19. January 2011, 09:29 »
Warum hat mutex.h eine Abhängigkeit auf process.h? Das klingt für mich falsch.

Ansonsten kannst du natürlich versuchen, in der mutex.h ein paar Forward-Deklarationen zu machen, bevor du die problematischen Header includest.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 19. January 2011, 09:40 »
Weil ich doof war...
Danke, habe das total übersehen.
Ich weiß nicht mehr, was ich damit anstellen wollte...
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

 

Einloggen