olsrd-0.6.1 unter Windows 7 kompilieren

OP (Firma: dm2sh) #2113632
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
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?
OP (Firma: dm2sh)
>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
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/).
Gast
Man kann unter Windows durchaus beide Toolchains nebeneinander 
installieren, Cygwin und MinGW (eventuell mit Zusatz MSYS). Die 
beeinflussen sich nicht nachteilig.
OP (Firma: dm2sh)
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?
OP (Firma: dm2sh)
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?
Gast
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.
OP (Firma: dm2sh)
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
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.
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.