olsrd-0.6.1 unter Windows 7 kompilieren

(Firma: dm2sh) #2113632
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?
Angehängte Dateien:
Persönliche Seite #2113647
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?
(Firma: dm2sh) #2113663
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.
Gast #2114112
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/).
(Firma: dm2sh) #2114300
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?
Gast #2114396
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.
(Firma: dm2sh) #2116627
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?
Persönliche Seite #2116713
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren