Forum: PC-Programmierung olsrd-0.6.1 unter Windows 7 kompilieren


von Stefan H. (Firma: dm2sh) (stefan_helmert)


Angehängte Dateien:

Lesenswert?

Hallo,

ich wollte olsrd-0.6.1 unter Windows 7 professional 64 Bit mit cygwin 
kompilieren. Hat leider nicht geklappt, obwohl ich flex, bison, make, 
mingw-core vorher installiert habe.
Ich habe wie beschrieben "make all libs" eingetippt, aber es kommt Error 
1, siehe Anhang.

Was ist noch falsch?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Stefan Helmert schrieb:
> aber es kommt Error 1, siehe Anhang.

Das ist nicht Dein Ernst, oder?

Den Text, der in einem Konsolenfenster angezeigt wird, kann man auch als 
Text in die Zwischenablage kopieren, so daß man ihn hier auch lesen 
kann.

Du könntest nach der Fehlermeldung googeln, anscheinend passt der 
Compiler nicht zu den Compileroptionen im Makefile.

Kann man das nicht nativ mit einem echten Win32-Compiler übersetzen, 
oder geht das nur mit dieser Linux-Emulations-Schicht?

von Stefan H. (Firma: dm2sh) (stefan_helmert)


Lesenswert?

>Den Text, der in einem Konsolenfenster angezeigt wird, kann man auch als
>Text in die Zwischenablage kopieren, so daß man ihn hier auch lesen
>kann.

Das Cygwin-Fenster war so eingestellt, dass sich nichts rauskopieren 
lies. So jetzt hab ich den Text noch mal kopiert:



$ make all libs
gcc -Wall -Wextra -Wold-style-definition -Wdeclaration-after-statement 
-Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations 
-Wsign-compare -Waggregate-return -Wmissing-noreturn 
-Wmissing-format-attribute -Wno-multichar
-Wno-deprecated-declarations -Wendif-labels -Wwrite-strings 
-Wbad-function-cast -Wpointer-arith -Wcast-qual -Wshadow 
-Wsequence-point -Wpointer-arith -Wcast-align -Wnested-externs -Winline 
-Wdisabled-optimization -finline-function
s-called-once -funit-at-a-time -fearly-inlining -finline-limit=350 
-mno-cygwin -ggdb -Isrc   -DUSE_FPM -DWIN32 -D_WIN32_WINNT=0x0600 
-I./src/win32 -DDEBUG    -c -o src/common/autobuf.o src/common/autobuf.c
gcc: The -mno-cygwin flag has been removed; use a mingw-targeted 
cross-compiler.

make: *** [src/common/autobuf.o] Error 1



>Du könntest nach der Fehlermeldung googeln, anscheinend passt der
>Compiler nicht zu den Compileroptionen im Makefile.

Ich habe mal gegoogled, es gibt wiedermal nur haufen Leute, die das 
gleiche Problem haben, aber keiner, der die Lösung hat.

>Kann man das nicht nativ mit einem echten Win32-Compiler übersetzen,
>oder geht das nur mit dieser Linux-Emulations-Schicht?

Das weiß ich nicht, steht ja nirgends was beschrieben.

von Schwarzer (Gast)


Lesenswert?

Warum hast du denn das -mno-cygwin flag in deinem Makefile drin?

Das Flag war mal dazu da, um die erzeugten Programme unabhängig von der 
Cygwin-DLL zu machen. Das Flag wurde vor langer Zeit aufgegeben, weil 
sich im Cygwin Projekt keiner mehr um diese Funktionalität kümmern 
wollte/konnte.

Wenn dich die Abhängigkeit von der Cygwin-DLL nicht stört, nimm das Flag 
aus dem Makefile raus.

Wenn dich die Abhängigkeit von der Cygwin-DLL stört, kannst du die 
aktuelle Cygwin Toolchain nicht verwenden. du kannst versuchen eine 
andere Toolchain zu benutzen.

Das wäre z.B. wie vorgeschlagen eine MinGW Toolchain. Die gibt es auf 
Linux lauffähig als Cross-Compiler und auch nativ auf Windows 
(http://www.mingw.org/).

von Schwarzer (Gast)


Lesenswert?

Man kann unter Windows durchaus beide Toolchains nebeneinander 
installieren, Cygwin und MinGW (eventuell mit Zusatz MSYS). Die 
beeinflussen sich nicht nachteilig.

von Stefan H. (Firma: dm2sh) (stefan_helmert)


Lesenswert?

So, ich habe das Flag rausgehauen. Nun kommt folgendes:



Stefan@Stefan-W500 /cygdrive/c/Users/Stefan/Downloads/olsrd-0.6.1
$ make all libs
gcc -Wall -Wextra -Wold-style-definition -Wdeclaration-after-statement 
-Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations 
-Wsign-compare -Waggregate-return -Wmissing-noreturn 
-Wmissing-format-attribute -Wno-multichar
-Wno-deprecated-declarations -Wendif-labels -Wwrite-strings 
-Wbad-function-cast -Wpointer-arith -Wcast-qual -Wshadow 
-Wsequence-point -Wpointer-arith -Wcast-align -Wnested-externs -Winline 
-Wdisabled-optimization -finline-function
s-called-once -funit-at-a-time -fearly-inlining -finline-limit=350 
-ggdb -Isrc   -DUSE_FPM -DWIN32 -D_WIN32_WINNT=0x0600 -I./src/win32 
-DDEBUG    -c -o src/common/autobuf.o src/common/autobuf.c
In file included from /usr/include/stdio.h:46,
                 from src/defs.h:50,
                 from src/common/autobuf.h:47,
                 from src/common/autobuf.c:42:
/usr/include/sys/types.h:115: error: redefinition of 'struct timespec'
In file included from src/defs.h:54,
                 from src/common/autobuf.h:47,
                 from src/common/autobuf.c:42:
/usr/include/time.h:171: error: conflicting types for 'nanosleep'
./src/win32/sys/time.h:90: error: previous declaration of 'nanosleep' 
was here
make: *** [src/common/autobuf.o] Error 1



Dass am Quellcode etwas falsch ist, kann ja nicht sein, sonst hätte das 
der Programmierer beim Compilieren gemerkt. Es können also nur irgend 
welche Flags sein, die sich auf Präprozessorkram beziehen?

von Stefan H. (Firma: dm2sh) (stefan_helmert)


Lesenswert?

So unter Linux hat es anstandslos durchcompiliert. Unter Windows/Cygwin 
scheinen ja irgendwelche doppelten definitionen aufzutauchen.
Scheinbar wurde das Zeug einfach weiterentwickelt ohne, dass es jemals 
wieder jemand unter Windows versucht hat zu compilieren?

von Schwarzer (Gast)


Lesenswert?

Das ist der "normale Wahnsinn" beim Portieren eines Projekts.

Du musst im Hinterkopf behalten, dass du ziemlich vorne im Projekt 
arbeitest. Seit Jahren hat anscheinend niemand mehr eine WIN32 Version 
mit einem aktuellen Cygwin GCC zusammengebaut.

Wenn es irgendwo spezifische Hilfe gibt, dann am ehesten auf der 
Developer-Mailingliste des Projekts.

von Stefan H. (Firma: dm2sh) (stefan_helmert)


Lesenswert?

So nun habe ich noch folgenden Fehler:



Stefan@Stefan-W500 /cygdrive/c/Users/Stefan/Downloads/olsrd-0.6.1
$ make all libs
gcc -Wall -Wextra -Wold-style-definition -Wdeclaration-after-statement 
-Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations 
-Wsign-compare -Waggregate-return -Wmissing-noreturn 
-Wmissing-format-attribute -Wno-multichar
-Wno-deprecated-declarations -Wendif-labels -Wwrite-strings 
-Wbad-function-cast -Wpointer-arith -Wcast-qual -Wshadow 
-Wsequence-point -Wpointer-arith -Wcast-align -Wnested-externs -Winline 
-Wdisabled-optimization -finline-function
s-called-once -funit-at-a-time -fearly-inlining -finline-limit=350 
-ggdb -Isrc   -DUSE_FPM -DWIN32 -D_WIN32_WINNT=0x0600 -I./src/win32 
-DDEBUG    -c -o src/common/autobuf.o src/common/autobuf.c
In file included from /usr/include/stdio.h:46,
                 from src/defs.h:50,
                 from src/common/autobuf.h:47,
                 from src/common/autobuf.c:42:
/usr/include/sys/types.h:116: error: redefinition of 'struct timespec'
make: *** [src/common/autobuf.o] Error 1



in types.h steht aber folgendes:

1
#ifndef __time_t_defined
2
typedef _TIME_T_ time_t;
3
#define __time_t_defined
4
5
/* Time Value Specification Structures, P1003.1b-1993, p. 261 */
6
7
8
struct timespec {
9
  time_t  tv_sec;   /* Seconds */
10
  long    tv_nsec;  /* Nanoseconds */
11
};
12
13
struct itimerspec {
14
  struct timespec  it_interval;  /* Timer period */
15
  struct timespec  it_value;     /* Timer expiration */
16
};
17
#endif

über diese #ifndef, #defined Konstrukte sollte das doch gar nicht 
passieren?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Stefan Helmert schrieb:
> über diese #ifndef, #defined Konstrukte sollte das doch gar nicht
> passieren?

Nun, struct timespec wird auch noch in irgendeiner anderen 
Headerdatei deklariert worden sein, und wenn die diese "include-guards" 
nicht enthält, dann passiert genau das, was bei Dir passiert.

Du könntest ja mal ein grep oder findstr auf Deine Headerdateien 
loslassen.

von BluBb_mADe (Gast)


Lesenswert?

Wunderbar...
Wiedermal keine Antwort auf die eigentliche Frage.

Muss man jetzt tatsächlich die ganzen Headerfiles durchwurschteln?
Oder ist es nur eine Kleinigkeit gewesen die mir jemand mal kurz 
erläutern kann?

Gruß
BluBb_mADe

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Natürlich war das eine Antwort auf die eigentliche Frage.
Stefan hat bloß das triviale Resultat nicht gepostet, nämlich das, wo 
die inkriminierte Struktur bereits definiert ist.

Du hingegen hast gar keine Frage gestellt, und nach einem Jahr ist 
dieser Thread hier auch schon ziemlich abgekühlt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.