2016-07-28 16 views
0

Derzeit ein RPC-System für verzögerungstoleranten Netzwerken aus ich schreibe Australien auf dem Serval Projekt basiert (GitHub) in C.Gebäude C mit auto unter OS X und Linux

Hauptsächlich auf die ich entwickle macOS El Capitan und alles funktioniert gut. Aber es ist etwas wichtig, dass mein Code auf macOS und Linux läuft. Aber Linux macht Ärger.

Ich wähle automake als mein Build-System, da dies der einzige ist, den ich mindestens ein wenig Erfahrung habe. Ich habe es auch mit CMake versucht, aber mit wenig Erfolg.

Mein Problem ist jetzt, dass alles gut auf MacOS funktioniert. Aber auf Linux (Debian) kompiliert nichts. autoreconf erzeugt ein Konfigurationsskript ohne Fehler, configure erzeugt ein Makefile ohne Fehler. Aber make ergibt eine Menge Fehler. Und wenn ich viel sage, meine ich wirklich viel (ca. 75.000 Zeilen).

Das erste Problem ist folgendes: In file included from /usr/include/x86_64-linux-gnu/sys/types.h:29:0, from /usr/local/include/curl/curlbuild.h:131, from /usr/local/include/curl/curl.h:34, from rpc.h:1, from main.c:1: /usr/include/x86_64-linux-gnu/bits/types.h:30:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘typedef’ typedef unsigned char __u_char;

ich um gegoogelt und einige Leute gefunden sagen, dass diese Art von Fehler irgendwo aus dem Benutzercode kommt, vielleicht ein ; oder ähnliches fehlen. Aber ich habe alles überprüft. Und eine fehlende ; wäre auch ein Problem auf MacOS.

Mein Code kann in meinem Github repo. gefunden werden Bitte verwenden Sie den dev Zweig. An diesem Punkt ist das Repo etwas ekelhaft und überhaupt nicht sauber. Ich werde aufräumen, wenn alles läuft.

Vielen Dank für Ihre Hilfe :)

Antwort

0

Dies ist wegen der serval/general/features.h. Hier geht es wie folgt:

curl/curl.h kann curlbuild.h, die sys/types.h enthält.

sys/types.h umfasst features.h (erwartet, das eine vom glibc kommen), die sys/cdefs.h umfasst, die __BEGIN_CDECL definieren (zu nichts, da diese C ist, nicht C++.)

sys/types.h beginnt mit (um die Sachen schnippeln, die ist erforderlich) nicht

__BEGIN_CDECL 

typedef unsigned char __u_char; 

seit __BEGIN_CDECL ist nicht definiert, es Fehler aus.

Vermeiden Sie die Verwendung von -Iserval/general in Ihrer Befehlszeile und enthalten Sie die Datei mit dem vollständigen relativen Pfad, und es sollte in Ordnung sein.

+0

Danke, das hat das Problem gelöst. – adur