2009-05-19 8 views
2

Auf einigen unserer Linux-Boxen mit gcc kompilieren -std = c99 macht struct ip_mreq verschwinden (im Lieferumfang von netinet/in.h)struct ip_mreq verschwindet, wenn sie mit -std Kompilieren = c99

Gibt es eine andere Schnittstelle wir sind soll verwendet werden?

+0

was meinst du mit "verschwinden"? Können Sie eine tatsächliche Compiler/Linker-Fehlermeldung bereitstellen? – lothar

+0

mit cpp ich kann sehen, die Struktur ist definiert oder nicht abhängig von der Anwesenheit von -std = c99 – user109425

Antwort

3

Versuchen Sie --std = gnu99.

Der Standard für GCC ist '--std = gnu89', was C89 mit GNU-Erweiterungen bedeutet. Wenn Sie "--std = c99" auswählen, aktivieren Sie C99, deaktivieren jedoch die GNU-Erweiterungen. '--std = gnu99' wählt sowohl C99- als auch GNU-Erweiterungen aus und bietet Ihnen das Beste aus beiden Welten.

+1

Oder verwenden Sie '-std = c99 -D_GNU_SOURCE' – wormsparty

0

Ich glaube nicht, dass es eine andere Schnittstelle pre-c99 gibt. Sie können dies nutzen können mit -std=c99, wenn Sie Folgendes an der Spitze Ihrer Quelle (n) hinzufügen:

#define __EXTENSIONS__ 

aber ein besserer Weg ist wahrscheinlich

#define _XOPEN_SOURCE 

Bitte beachten Sie, dass ich haven‘ t bestätigt.

0

Ich habe das gleiche Problem. Alles wird mit gcc kompiliert, wenn "-std = c99" nicht angegeben wird, aber wenn das Flag eingeschlossen wird, schlägt der Compiler fehl, dass das Feld mit dem Typ 'struct ip_mreq' "unvollständigen Typ hat."

Dies ist ein Problem, da ich von einigen C99-Funktionen abhängig bin.

+0

Vielen Dank! Das hat den Trick gemacht. –

Verwandte Themen