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?
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?
>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.
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/).
Man kann unter Windows durchaus beide Toolchains nebeneinander installieren, Cygwin und MinGW (eventuell mit Zusatz MSYS). Die beeinflussen sich nicht nachteilig.
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?
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?
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.
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?
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.