syntax error in netinet/in.h

muge

Active Member
Hallo zusammen.
Ich habe FreeBSD 4.8 am laufen.
beim versuch, ein Programm zu kompilieren, meldet er beim #include<netinet/in.h> in Zeile 235 einen Syntax error (nachher noch ganz viele in in.h, in6.h und sockets.h). für mich sieht das allerdings korrekt aus.

234: struct in_addr {
235: in_addr_t s_addr;
236 :};

Ich habe beim googeln gelesen, dass der 4.6er Release solche Probleme hatte, vom 4.8er aber nicht...
Nun, ich denke, da gibt es sicher funktionierende Headerfiles, aber ich weiss nicht, wo ich die herbekomme. Habe nichts gefunden...kann mir da jemand einen Tipp geben?

thx muge
 

muge

Active Member
Ja, ein selbstgestricktes.
Es kompiliert aber auf Linuxrechnern, deshalb gehe ich wirklich von Fehlern in den Headerfiles aus.
 

asg

push it, don´t hype
Wenn es dort kompiliert muss es nicht unter BSD kompilieren.
Aber sorry, bin nicht der Programmierer vor dem Herren.
Programmierer, hier mal melden!
 

muge

Active Member
Naja, das habe ich eben auch gemerkt, dass ein unter Linux kompilierendes Programm nicht zwangsläufig unter BSD auch kompilieren muss.
Aber es ist ein Hinweis, dass die Syntax des Programmes eigentlich richtig ist (oder?).
 

oenone

Well-Known Member
es waere hilfreich, wenn du mal angeben koenntest, was fuer header dateien du inkludierst und v.a. in welcher reihenfolge.

auf bald
oenone
 

muge

Active Member
Ok, das sind alle includes in der reihenfolge. Allerdings, ich wusste gar nicht, das die Reihenfolge draufankommt.

#include <string.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <unistd.h>
#include <iostream>
#include <signal.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>

thx muge
 

oenone

Well-Known Member
bei diesen schon...

inkludiere mal die unistd.h vor dem restlichen netzkram, also spaetestens nach string.h

auf bald
oenone
 

muge

Active Member
oenone, woher hast du eigentlich diese Infos? sind diese Abhängigkeiten irgendwo dokumentiert?
Ich habe nämlich schon wieder dasselbe problem (diesmal ein Programm von meinem Dozenten). Ich habe die Reihenfolge schon ein bisschen vertauscht, aber bisher ohne erfolg..

#include <unistd.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h> // required by inet_aton
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <stdlib.h>
#include <sys/un.h>
#include <netdb.h>
#include <signal.h>

thx muge
 

oenone

Well-Known Member
groesstenteils hab ich meine infos aus den manpages...

von der socket(2) manpage:
Code:
     #include <sys/types.h>
     #include <sys/socket.h>

von der inet(3) manpage:
Code:
     #include <sys/types.h>
     #include <sys/socket.h>
     #include <netinet/in.h>
     #include <arpa/inet.h>

und ansonsten durch ausprobieren oder logisches nachdenken (z.b. die typen sollten vorher bekannt sein, sockets brauchst du fuer alle anderen netzwerkdinger, etc..)
und manchmal im source von anderen programmen nachsehen - use the source, luke ^^

btw. die unistd.h inkludiert von sich aus schon die sys/types.h.

auf bald
oenone
 
Oben