mikrocontroller.net

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


Autor: Stefan Helmert (Firma: dm2sh) (stefan_helmert)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan Helmert (Firma: dm2sh) (stefan_helmert)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Schwarzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/).

Autor: Schwarzer (Gast)
Datum:

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

Autor: Stefan Helmert (Firma: dm2sh) (stefan_helmert)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan Helmert (Firma: dm2sh) (stefan_helmert)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Schwarzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Helmert (Firma: dm2sh) (stefan_helmert)
Datum:

Bewertung
0 lesenswert
nicht 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:

#ifndef __time_t_defined
typedef _TIME_T_ time_t;
#define __time_t_defined

/* Time Value Specification Structures, P1003.1b-1993, p. 261 */


struct timespec {
  time_t  tv_sec;   /* Seconds */
  long    tv_nsec;  /* Nanoseconds */
};

struct itimerspec {
  struct timespec  it_interval;  /* Timer period */
  struct timespec  it_value;     /* Timer expiration */
};
#endif

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: BluBb_mADe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.